Загрузка данных
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// ++ Бойков BSLR-1852
СписокЭлементов = Новый Массив;
СписокЭлементов.Добавить("ЛичныйКабинет");
СписокЭлементов.Добавить("ТоварыТовар");
СписокЭлементов.Добавить("УслугиУслугаМП");
СписокЭлементов.Добавить("ВыкупТовар");
топ_ИнтерфейсСервер.НастроитьПараметрыВыбораПоТорговымПлощадкам(ЭтотОбъект, СписокЭлементов);
// -- Бойков BSLR-1852
Если Маркетплейс <> ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет") тогда
Элементы.СсылкаНаСтрОтчета.Заголовок = ""; // письмерова 12.09.2023 BSLR-2566
КонецЕсли;
// ++ Стародубцев BSLR-3624
топ_ОбщийМодульСервер.ОбновитьДанныеСтатистики(ЭтотОбъект.ИмяФормы);
// -- Стародубцев BSLR-3624
// письмерова 11.12.2025 BSLR-5126
Если ЗначениеЗаполнено(Объект.ДатаОкончания) ТОгда
ЗначениеОсновнойСтавкиНДС = топ_ОбщийВызовСервера.ЗначениеОсновнойСтакиНДС(Объект.ДатаОкончания);
КонецЕсли;
ОбновитьИндексыДокументов(); // BSLR-5372
ОбновитьДеревоДокументов(); // BSLR-5340
КонецПроцедуры
ПРоцедура ОбновитьДеревоДокументов() // BSLR-5340
ДеревоДокументов.ПолучитьЭлементы().Очистить();
ЭлементыДерева = ДеревоДокументов.ПолучитьЭлементы();
ДобавленаГруппа = Ложь;
Для Каждого Стр Из Объект.Документы Цикл
Если Стр.ТипДокумента <> "Реализация через комиссионера юр.лицу" ТОгда
СтрокаДок = ЭлементыДерева.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаДок, Стр);
Иначе
Если НЕ ДобавленаГруппа ТОгда
СтрокаДок = ЭлементыДерева.Добавить();
СтрокаДок.ТипДокумента = "Документы реализации юр.лицам";
СтрокаДок.ИндексКартинки = 2; // пустая картинка
ДобавленаГруппа = Истина;
ПодчиненныеРеал = СтрокаДок.ПолучитьЭлементы();
КонецЕсли;
СтрокаРеал = ПодчиненныеРеал.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаРеал, Стр);
КонецЕсли;
КонецЦикла;
КонецПРоцедуры
ПРоцедура ОбновитьИндексыДокументов() // BSLR-5372
Для Каждого Стр из Объект.Документы Цикл
Если Стр.ДокументНавигационнаяСсылка = "" Тогда // пустая строка
Продолжить;
КонецЕсли;
НС = Стр.ДокументНавигационнаяСсылка;
ПерваяТочка = Найти(НС, "e1cib/data/");
ВтораяТочка = Найти(НС, "?ref=");
ПредставлениеТипа = Сред(НС, ПерваяТочка + 11, ВтораяТочка - ПерваяТочка - 11);
ШаблонЗначения = ЗначениеВСтрокуВнутр(ПредопределенноеЗначение(ПредставлениеТипа + ".ПустаяСсылка"));
ЗначениеСсылки = СтрЗаменить(ШаблонЗначения, "00000000000000000000000000000000", Сред(НС, ВтораяТочка + 5));
СсылкаДок = ЗначениеИзСтрокиВнутр(ЗначениеСсылки);
Если СсылкаДок.ПометкаУдаления Тогда
Стр.ИндексКартинки = 1;
Иначе
Если НЕ СсылкаДок.Проведен ТОгда
Стр.ИндексКартинки = 2;
Иначе
Стр.ИндексКартинки = 0;
КонецЕсли;
КонецЕсли;
// по умолчанию установлен =0, это картинка проведен
КонецЦикла;
КонецПРоцедуры
&НаКлиенте
Процедура УстановитьВидимостьДоступность()
// письмерова 17.11.2023 BSLR-2814
Если ЗначениеЗаполнено(Объект.ЛичныйКабинет) Тогда
ПолучитьЗначениеСНО();
Иначе
СНО = Неопределено;
КонецЕсли;
ЭтоЯМ = Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет");
ЭтоWB = Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries");
ЭтоОзон = Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON");
ЭтоСбер = Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет"); // BSLR-4190
Элементы.ФормаЗагрузитьИзExcel.Заголовок = "Загрузить из excel"; //BSLR-3639, Чупраков А.Н., 02.07.24
Если ЗначениеЗаполнено(Объект.ЛичныйКабинет) тогда
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") тогда
Элементы.СуммаУслугХранения.Доступность = Ложь;
Элементы.Декорация1.Доступность = Ложь;
Элементы.Декорация1.Заголовок = "На текущий момент OZON может присылать не корректные данные по услуге с наименованием ""Услуга FBO (без размещения)/услуга FBS (Marketplace Услуги селлеров)"". В случае, если по ней данные не сходятся с первичными документами, тогда поправьте их вручную.";
Элементы.СуммаУслугПлатнойПриемки.Доступность = Ложь;
Элементы.СуммаДоплаты.Доступность = Ложь;
Элементы.ФормаЗагрузитьИзExcel.Видимость = истина;
Элементы.ФормаЗагрузитьДанные.Видимость = Ложь;
Элементы.ДатаНачала.Видимость = истина;
Элементы.Период.Видимость = ложь;
Элементы.ПродажиВРБВПродажахРФ.Доступность = Ложь;
Элементы.УдержатьСуммуДоставкиПриВыкупе.Видимость = Ложь;
// письмерова 14.12.2023 BSLR-2953
Элементы.СуммаКомиссииПоУПД.Доступность = Истина;
Элементы.РаспределитьРазницу.Доступность = Истина;
Элементы.СуммаКомиссииПоУПД.Подсказка = "Если возникла погрешность в загруженном отчете, заполните поле данными из Позаказного отчета о реализации: ""Итого комиссия после скидок"" или УПД и нажмите Распределить разницу. Сумма комиссии после скидок будет скорректирована.";
Элементы.ГруппаПоляСуммы.Видимость = Истина;
Элементы.ГруппаУслугиХранения.Видимость = Ложь;
Элементы.ТоварыСуммаДоплатыOzon.Видимость = Истина;
Элементы.ТоварыСуммаДоплатыOzon.Заголовок = "Доплата за счет Озон";
Элементы.ВыкупЗагрузитьВыкупыИзExcel.Видимость = Ложь;
Элементы.ЗагрузитьВыкупыИзExcelOZON.Видимость = Истина;// письмерова 13.10.2023 BSLR-1587
Элементы.ВыкупКомиссия.Видимость = Ложь;
Элементы.ВыкупСуммаНДСВознаграждения.Видимость = Ложь;
Элементы.ВыкупЗаказПокупателяМП.Видимость = Ложь;
Элементы.ВыкупЗаказПокупателя.Видимость = Ложь;
Элементы.ВыкупИдентификатор.Видимость = Ложь;
Элементы.ВыкупСтранаПродажи.Видимость = Ложь;
Элементы.ТоварыАртикулМП.Заголовок = "Артикул";
Элементы.ТоварыРазмерWB.Видимость = Ложь;
Элементы.ВыкупРазмерWB.Видимость = Ложь;
Элементы.ТоварыСуммаКВыплате.Видимость = Ложь;
Элементы.ТоварыСуммаНДСВознаграждения.Видимость = Истина;
Элементы.ТоварыВознаграждениеОператору.Видимость = Ложь;
Элементы.ВыгужатьДетализациюWB_Excel.Видимость = Ложь; //LAShadrin BSLR-1338
Элементы.ВключитьВСуммуПродажВозмешения.Видимость = Ложь; //письмерова 14.03.2024 BSLR-3357
Элементы.ГруппаНастройкиВБ.Видимость = Ложь; // письмерова 08.07.2024 BSLR-3667
Элементы.ТоварыНомерСчФакт.Видимость = Истина; // письмерова 18.08.2023 BSLR-2035
Элементы.ТоварыПокупатель.Видимость = Истина;
Элементы.ТоварыЗагрузитьДанныеЮЛ.Видимость = Истина;
Элементы.СоздаватьКонтрагентов.Видимость = Истина;
Элементы.ТоварыДатаСчФакт.Видимость = Истина;
// ++ Куряев 04.10.2023 BSLR-2661
//Элементы.ГруппаПоляСуммы.Видимость = Ложь; BSLR-2953 - сумма по упд должна быть в озон
// Куряев 04.10.2023 BSLR-2661
Элементы.НадписьВыкупыУСН.Видимость = Ложь; // письмерова 21.11.2023 BSLR-2814
Если Объект.ДатаНачала >= Дата('20231001000000') Тогда //письмерова 28.11.2023 BSLR-2862
Элементы.ТоварыКомиссияБазовая.Видимость = истина;
Элементы.ТоварыКомиссия.Заголовок = "Комиссия после скидок";
Иначе
Элементы.ТоварыКомиссияБазовая.Видимость = Ложь;
Элементы.ТоварыКомиссия.Заголовок = "Комиссия";
КонецЕсли;
Элементы.ТоварыВыплатыПоМеханикамЛояльностиПартнеров.Видимость = истина; // письмерова 20.08.2024 BSLR-3677
Элементы.ТолькоВыкупы.Видимость = Истина; // письмерова 28.08.2024 BSLR-3601
Элементы.УслугиЗагрузитьОтчетБаллыЗаСкидки.Видимость = Истина; //Крупа BSLR-4753
Элементы.УслугиБаллы.Видимость = Истина; //Крупа BSLR-4753
Элементы.УслугиСуммаДоВычетаБаллов.Видимость = Истина; //Крупа BSLR-4753
ИначеЕсли Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") тогда
Элементы.СуммаУслугХранения.Доступность = истина;
Элементы.Декорация1.Заголовок = "Суммы услуг могут быть отрицательные, вносите их с учётом знака";
Элементы.СуммаУслугПлатнойПриемки.Доступность = истина;
Элементы.СуммаДоплаты.Доступность = Истина;
Элементы.ФормаЗагрузитьИзExcel.Видимость = Истина;
Элементы.ФормаЗагрузитьДанные.Видимость = истина;
Элементы.ДатаНачала.Видимость = истина;
Элементы.Период.Видимость = ложь;
Элементы.ПродажиВРБВПродажахРФ.Доступность = Истина;
Элементы.УдержатьСуммуДоставкиПриВыкупе.Видимость = Истина;
Элементы.ГруппаУслугиХранения.Видимость = Истина; // письмерова 30.01.2024 BSLR-3146
Элементы.СуммаКомиссииПоУПД.Доступность = Истина;
Элементы.РаспределитьРазницу.Доступность = Истина;
Элементы.ТоварыСуммаДоплатыOzon.Видимость = Ложь;
Элементы.ВыкупЗагрузитьВыкупыИзExcel.Видимость = Истина;
Если СНО = ПредопределенноеЗначение("Перечисление.СистемыНалогообложения.Упрощенная") Тогда // письмерова 21.11.2023 BSLR-2814
//Элементы.ВыкупЗагрузитьВыкупыИзExcel.Доступность = Ложь;
//Элементы.НадписьВыкупыУСН.Видимость = Истина;
Иначе
Элементы.ВыкупЗагрузитьВыкупыИзExcel.Доступность = истина;
Элементы.НадписьВыкупыУСН.Видимость = Ложь;
КонецЕсли;
Элементы.ЗагрузитьВыкупыИзExcelOZON.Видимость = Ложь;// письмерова 13.10.2023 BSLR-1587
Элементы.ВыкупКомиссия.Видимость = Истина;
Элементы.ВыкупСуммаНДСВознаграждения.Видимость = Истина;
Элементы.ВыкупЗаказПокупателяМП.Видимость = Истина;
Элементы.ВыкупЗаказПокупателя.Видимость = Истина;
Элементы.ВыкупИдентификатор.Видимость = Истина;
Элементы.ВыкупСтранаПродажи.Видимость = Истина;
Элементы.ТоварыАртикулМП.Заголовок = "Артикул";
Элементы.ТоварыРазмерWB.Видимость = Истина;
Элементы.ВыкупРазмерWB.Видимость = Истина;
Элементы.ТоварыСуммаКВыплате.Видимость = Ложь;
Элементы.ТоварыСуммаНДСВознаграждения.Видимость = Истина;
Элементы.ВыгужатьДетализациюWB_Excel.Видимость = Истина; //LAShadrin BSLR-1338
Элементы.ВключитьВСуммуПродажВозмешения.Видимость = Истина; //письмерова 14.03.2024 BSLR-3357
Элементы.ГруппаНастройкиВБ.Видимость = Истина; // письмерова 08.07.2024 BSLR-3667
Элементы.ТоварыВознаграждениеОператору.Видимость = Ложь;
Элементы.ТоварыНомерСчФакт.Видимость = Истина; // BSLR-4698
Элементы.ТоварыПокупатель.Видимость = Истина; // BSLR-4698
Элементы.ТоварыЗагрузитьДанныеЮЛ.Видимость = Истина; // BSLR-4895
Элементы.ТоварыЗагрузитьДанныеЮЛ.Заголовок = "Загрузить реестры юр.лиц (файлы)"; // BSLR-4895
Элементы.СоздаватьКонтрагентов.Видимость = Истина; // BSLR-4698
Элементы.ТоварыДатаСчФакт.Видимость = Истина; // BSLR-4698
// ++ Куряев 04.10.2023 BSLR-2661
Элементы.ГруппаПоляСуммы.Видимость = Истина;
Элементы.ТоварыКомиссияБазовая.Видимость = Ложь; //письмерова 28.11.2023 BSLR-2862
Элементы.ТоварыВыплатыПоМеханикамЛояльностиПартнеров.Видимость = Ложь; // письмерова 20.08.2024 BSLR-3677
Элементы.ТолькоВыкупы.Видимость = Ложь; // письмерова 28.08.2024 BSLR-3601
Элементы.УслугиЗагрузитьОтчетБаллыЗаСкидки.Видимость = Ложь; //Крупа BSLR-4753
Элементы.УслугиБаллы.Видимость = Ложь; //Крупа BSLR-4753
Элементы.УслугиСуммаДоВычетаБаллов.Видимость = Ложь; //Крупа BSLR-4753
ИначеЕсли Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") тогда
Элементы.СуммаУслугХранения.Доступность = Ложь;
Элементы.Декорация1.Доступность = Ложь;
Элементы.Декорация1.Заголовок = "";
Элементы.Декорация1.Видимость = Ложь;
Элементы.СуммаУслугПлатнойПриемки.Доступность = Ложь;
Элементы.СуммаДоплаты.Доступность = Ложь;
Элементы.ФормаЗагрузитьИзExcel.Видимость = истина;
Элементы.ФормаЗагрузитьИзExcel.Заголовок = "Загрузить (zip)";
Элементы.ФормаЗагрузитьДанные.Видимость = Ложь;
Элементы.ДатаНачала.Видимость = истина;
Элементы.Период.Видимость = ложь;
Элементы.ПродажиВРБВПродажахРФ.Доступность = Ложь;
Элементы.УдержатьСуммуДоставкиПриВыкупе.Видимость = Ложь;
Элементы.ГруппаУслугиХранения.Видимость = Ложь; // письмерова 30.01.2024 BSLR-3146
Элементы.СуммаКомиссииПоУПД.Доступность = Ложь;
Элементы.РаспределитьРазницу.Доступность = Ложь;
Элементы.ТоварыСуммаДоплатыOzon.Видимость = Истина;
Элементы.ТоварыСуммаДоплатыOzon.Заголовок = "Доплата за счет Сбер";
Элементы.ТоварыАртикулМП.Заголовок = "offer_id";
Элементы.ВыкупЗагрузитьВыкупыИзExcel.Видимость = ложь;
Элементы.ЗагрузитьВыкупыИзExcelOZON.Видимость = Ложь;// письмерова 13.10.2023 BSLR-1587
Элементы.ТоварыРазмерWB.Видимость = Ложь;
Элементы.ВыкупРазмерWB.Видимость = Ложь;
Элементы.ТоварыШтрихКод.Видимость = Ложь;
Элементы.ТоварыСуммаКВыплате.Видимость = Истина;
Элементы.ТоварыСуммаНДСВознаграждения.Видимость = Ложь;
Элементы.ТоварыВознаграждениеОператору.Видимость = ЛОжь; // не приходит больше
Элементы.ВыгужатьДетализациюWB_Excel.Видимость = Ложь; //LAShadrin BSLR-1338
Элементы.ВключитьВСуммуПродажВозмешения.Видимость = Ложь; //письмерова 14.03.2024 BSLR-3357
Элементы.ГруппаНастройкиВБ.Видимость = Ложь; // письмерова 08.07.2024 BSLR-3667
Элементы.ТоварыНомерСчФакт.Видимость = Ложь; // письмерова 18.08.2023 BSLR-2035
Элементы.ТоварыПокупатель.Видимость = Ложь;
Элементы.ТоварыЗагрузитьДанныеЮЛ.Видимость = Ложь;
Элементы.СоздаватьКонтрагентов.Видимость = Ложь;
Элементы.ТоварыДатаСчФакт.Видимость = Ложь;
// ++ Куряев 04.10.2023 BSLR-2661
Элементы.ГруппаПоляСуммы.Видимость = Ложь;
// Куряев 04.10.2023 BSLR-2661
Элементы.НадписьВыкупыУСН.Видимость = Ложь; // письмерова 21.11.2023 BSLR-2814
Элементы.ТоварыКомиссияБазовая.Видимость = Ложь; //письмерова 28.11.2023 BSLR-2862
Элементы.ТоварыВыплатыПоМеханикамЛояльностиПартнеров.Видимость = Ложь; // письмерова 20.08.2024 BSLR-3677
Элементы.ТолькоВыкупы.Видимость = Ложь; // письмерова 28.08.2024 BSLR-3601
Элементы.УслугиЗагрузитьОтчетБаллыЗаСкидки.Видимость = Ложь; //Крупа BSLR-4753
Иначе
Элементы.СуммаУслугХранения.Доступность = Ложь;
Элементы.Декорация1.Доступность = Ложь;
Элементы.Декорация1.Заголовок = "Суммы услуг могут быть отрицательные, вносите их с учётом знака";
Элементы.СуммаУслугПлатнойПриемки.Доступность = Ложь;
Элементы.СуммаДоплаты.Доступность = Ложь;
Элементы.ФормаЗагрузитьИзExcel.Видимость = истина;
Элементы.ФормаЗагрузитьДанные.Видимость = истина;
Элементы.ДатаНачала.Видимость = истина;
Элементы.Период.Видимость = ложь;
Элементы.ПродажиВРБВПродажахРФ.Доступность = Ложь;
Элементы.УдержатьСуммуДоставкиПриВыкупе.Видимость = Ложь;
Элементы.ТоварыАртикулМП.Заголовок = "Артикул";
Элементы.ГруппаУслугиХранения.Видимость = Ложь; // письмерова 30.01.2024 BSLR-3146
Элементы.СуммаКомиссииПоУПД.Доступность = Ложь;
Элементы.РаспределитьРазницу.Доступность = Ложь;
// письмерова 19.11.2024 BSLR-4095
//Элементы.ТоварыСуммаДоплатыOzon.Видимость = Ложь;
Элементы.ТоварыСуммаДоплатыOzon.Видимость = Истина;
Элементы.ТоварыСуммаДоплатыOzon.Заголовок = "Сумма всех скидок";
Если Объект.ДатаНачала < Дата(2024,10,1) Тогда
Элементы.ТоварыСуммаДоплатыOzon.Видимость = Ложь;
КонецЕсли;
Элементы.ТоварыСуммаКВыплате.Видимость = Ложь;
Элементы.ТоварыРазмерWB.Видимость = Ложь;
Элементы.ВыкупРазмерWB.Видимость = Ложь;
Элементы.ТоварыВознаграждениеОператору.Видимость = Ложь;
Элементы.ВыгужатьДетализациюWB_Excel.Видимость = Ложь; //LAShadrin BSLR-1338
Элементы.ВключитьВСуммуПродажВозмешения.Видимость = Ложь; //письмерова 14.03.2024 BSLR-3357
Элементы.ГруппаНастройкиВБ.Видимость = Ложь; // письмерова 08.07.2024 BSLR-3667
Элементы.ТоварыНомерСчФакт.Видимость = истина; // письмерова 14.12.2023 BSLR-2680
Элементы.ТоварыНомерСчФакт.Заголовок = "Номер УПД"; // письмерова 14.12.2023 BSLR-2680
Элементы.ТоварыПокупатель.Видимость = истина; // письмерова 14.12.2023 BSLR-2680
Элементы.ТоварыЗагрузитьДанныеЮЛ.Видимость = Ложь;
Элементы.СоздаватьКонтрагентов.Видимость = истина; // письмерова 14.12.2023 BSLR-2680
Элементы.ТоварыДатаСчФакт.Видимость = истина; // письмерова 14.12.2023 BSLR-2680
Элементы.ТоварыДатаСчФакт.Заголовок = "Дата УПД"; // письмерова 14.12.2023 BSLR-2680
// ++ Куряев 04.10.2023 BSLR-2661
Элементы.ГруппаПоляСуммы.Видимость = Ложь;
// Куряев 04.10.2023 BSLR-2661
Элементы.НадписьВыкупыУСН.Видимость = Ложь; // письмерова 21.11.2023 BSLR-2814
Элементы.ТоварыКомиссияБазовая.Видимость = Ложь; //письмерова 28.11.2023 BSLR-2862
Элементы.ТоварыВыплатыПоМеханикамЛояльностиПартнеров.Видимость = Ложь; // письмерова 20.08.2024 BSLR-3677
Элементы.ТолькоВыкупы.Видимость = Ложь; // письмерова 28.08.2024 BSLR-3601
Элементы.ТоварыКомиссия.Видимость = Ложь; //письмерова 03.10.2024 BSLR-3978
Элементы.ТоварыСуммаНДСВознаграждения.Видимость = Ложь; //письмерова 03.10.2024 BSLR-3978
Элементы.УслугиЗагрузитьОтчетБаллыЗаСкидки.Видимость = Ложь; //Крупа 17.04.2026 BSLR-4753
Элементы.УслугиБаллы.Видимость = Ложь; //Крупа BSLR-4753
Элементы.УслугиСуммаДоВычетаБаллов.Видимость = Ложь; //Крупа BSLR-4753
КонецЕсли;
Если Объект.ТолькоВыкупы Тогда // письмерова 28.08.2024 BSLR-3601
Элементы.ФормаЗагрузитьИзExcel.Доступность = Ложь;
Иначе
Элементы.ФормаЗагрузитьИзExcel.Доступность = Истина;
КонецЕсли;
иначе
Элементы.ДатаНачала.Видимость = ложь;
Элементы.Период.Видимость = истина;
Элементы.ФормаЗагрузитьДанные.Видимость = Ложь;
Элементы.ФормаЗагрузитьИзExcel.Видимость = Ложь;
Элементы.ПродажиВРБВПродажахРФ.Доступность = Ложь;
Элементы.СуммаУслугХранения.Доступность = Ложь;
Элементы.Декорация1.Доступность = Ложь;
Элементы.Декорация1.Заголовок = "Суммы услуг могут быть отрицательные, вносите их с учётом знака";
Элементы.СуммаУслугПлатнойПриемки.Доступность = Ложь;
Элементы.СуммаДоплаты.Доступность = Ложь;
Элементы.СуммаКомиссииПоУПД.Доступность = Ложь;
Элементы.РаспределитьРазницу.Доступность = Ложь;
Элементы.ТоварыРазмерWB.Видимость = Ложь;
Элементы.ВыкупРазмерWB.Видимость = Ложь;
Элементы.ТоварыСуммаНДСВознаграждения.Видимость = Истина;
Элементы.ТоварыНомерСчФакт.Видимость = Ложь; // письмерова 18.08.2023 BSLR-2035
Элементы.ТоварыПокупатель.Видимость = Ложь;
Элементы.ТоварыЗагрузитьДанныеЮЛ.Видимость = Ложь;
Элементы.СоздаватьКонтрагентов.Видимость = Ложь;
Элементы.ТоварыДатаСчФакт.Видимость = Ложь;
// ++ Куряев 04.10.2023 BSLR-2661
Элементы.ГруппаПоляСуммы.Видимость = Ложь;
// Куряев 04.10.2023 BSLR-2661
Элементы.НадписьВыкупыУСН.Видимость = Ложь; // письмерова 21.11.2023 BSLR-2814
Элементы.ТоварыКомиссияБазовая.Видимость = Ложь; //письмерова 28.11.2023 BSLR-2862
Элементы.ТоварыВыплатыПоМеханикамЛояльностиПартнеров.Видимость = Ложь; // письмерова 20.08.2024 BSLR-3677
Элементы.ТолькоВыкупы.Видимость = Ложь; // письмерова 28.08.2024 BSLR-3601
Элементы.УслугиЗагрузитьОтчетБаллыЗаСкидки.Видимость = Ложь; //Крупа 17.04.2026 BSLR-4753
Элементы.УслугиБаллы.Видимость = Ложь; //Крупа BSLR-4753
Элементы.УслугиСуммаДоВычетаБаллов.Видимость = Ложь; //Крупа BSLR-4753
КонецЕсли;
// BSLR-5071
Если (Объект.Товары.Количество() или Объект.Выкуп.Количество() Или Объект.Компенсации.Количество()) и Объект.Документы.Количество() = 0 тогда
Элементы.ФормаСоздатьДокументы.Доступность = Истина;
// письмерова 05.11.2025 BSLR-5051 ++
ИначеЕсли (Объект.Товары.Количество()= 0 и Объект.Услуги.Количество()<>0) и Объект.Документы.Количество() = 0 ТОгда
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет") ТОгда
Элементы.ФормаСоздатьДокументы.Доступность = Истина;
Иначе
Элементы.ФормаСоздатьДокументы.Доступность = Ложь;
КонецЕсли; // BSLR-5051 --
Иначе
Элементы.ФормаСоздатьДокументы.Доступность = Ложь;
КонецЕсли;
// письмерова 07.09.2023 BSLR-2415
//Если Объект.Документы.Количество() ТОгда
// Элементы.ФормаСоздатьДокументы.Доступность = Ложь;
//КонецЕсли;
// если есть доки то блокируем форму
Если Объект.ОтчетКомиссионераПродажа.Пустая() и Объект.ОтчетКомиссионераВозврат.Пустая() и Объект.ПриходнаяНакладная.Пустая()
и Объект.РасходнаяНакладнаяКомиссия.Пустая() и Объект.Документы.Количество() = 0 тогда // письмерова 07.09.2023 BSLR-2415
Элементы.НомерВходящегоДокумента.Доступность = Истина;
Элементы.ДатаВходящегоДокумента.Доступность = Истина;
Элементы.НомерВходящегоДокументаВыкупа.Доступность = Истина;
Элементы.ДатаВходящегоДокументаВыкупа.Доступность = Истина;
//Элементы.ЛичныйКабинет.Доступность = Истина;
Элементы.ЛичныйКабинет.ТолькоПросмотр = ЛОжь;
Элементы.ДатаНачала.Доступность = Истина;
Элементы.Товары.ТолькоПросмотр = Ложь;
Элементы.Услуги.ТолькоПросмотр = Ложь;
Элементы.Компенсации.ТолькоПросмотр = Ложь; // BSLR-3318
Элементы.ОчиститьСвязанныеДокументы.Доступность = Ложь;
Элементы.ОбновитьСтатусДокументов.Доступность = Ложь; // BSLR-5372
иначе
Элементы.СуммаКомиссииПоУПД.Доступность = ложь;
Элементы.РаспределитьРазницу.Доступность = ложь;
Элементы.НомерВходящегоДокумента.Доступность = Ложь;
Элементы.ДатаВходящегоДокумента.Доступность = Ложь;
Элементы.НомерВходящегоДокументаВыкупа.Доступность = Ложь;
Элементы.ДатаВходящегоДокументаВыкупа.Доступность = Ложь;
//Элементы.ЛичныйКабинет.Доступность = Ложь;
Элементы.ЛичныйКабинет.ТолькоПросмотр = Истина;
Элементы.ДатаНачала.Доступность = Ложь;
Элементы.СуммаУслугХранения.Доступность = Ложь;
Элементы.СуммаУслугПлатнойПриемки.Доступность = Ложь;
Элементы.СуммаДоплаты.Доступность = Ложь;
Элементы.Товары.ТолькоПросмотр = Истина;
Элементы.Услуги.ТолькоПросмотр = Истина;
Элементы.Компенсации.ТолькоПросмотр = Истина; // BSLR-3318
Элементы.ОчиститьСвязанныеДокументы.Доступность = Истина;
Элементы.ОбновитьСтатусДокументов.Доступность = Истина; // BSLR-5372
КонецЕсли;
Элементы.ОтражатьКомиссионноеВознаграждениеОтдельнойУслугой.Доступность = Истина; // BSLR-3906
если ЗначениеЗаполнено(Объект.ПриходнаяНакладная) или ЗначениеЗаполнено(Объект.ПриходнаяНакладнаяКомиссия)
Или Объект.Документы.Количество() Тогда // письмерова 07.09.2023 BSLR-2415
Элементы.СуммаУслугХранения.Доступность = Ложь;
Элементы.СуммаУслугПлатнойПриемки.Доступность = Ложь;
Элементы.СуммаДоплаты.Доступность = Ложь;
Элементы.ОтражатьКомиссионноеВознаграждениеОтдельнойУслугой.Доступность = Ложь; // BSLR-3906
КонецЕсли;
//если в табличках есть данные то покажем подсказки и поле для распределения сумм для ВБ
если (Объект.Товары.Количество() или Объект.Услуги.Количество()) и ЗначениеЗаполнено(Объект.НомерВходящегоДокумента) и Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") тогда
Элементы.ГруппаСсылкаНастрОтчетаПодсказка.Видимость = истина;
Элементы.СсылкаНаСтрОтчета.Заголовок = топ_РаботаСМаркетплейсами_Wildberries.ПолучитьАдресСсылкиНаОтчёт(Объект.НомерВходящегоДокумента,Объект.ДатаНачала); // письмерова 12.08.2024 BSLR-3773
иначе
Элементы.ГруппаСсылкаНастрОтчетаПодсказка.Видимость = Ложь;
Если Маркетплейс <> ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет") тогда
Элементы.СсылкаНаСтрОтчета.Заголовок = ""; // письмерова 12.09.2023 BSLR-2566
КонецЕсли;
КонецЕсли;
// блокировка кнопок с учетом проведения
Если ЗначениеЗаполнено(Объект.ЛичныйКабинет) и ЗначениеЗаполнено(Объект.ДатаНачала)и ЗначениеЗаполнено(Объект.ДатаОкончания) и НЕ Объект.Проведен тогда
Элементы.ФормаЗагрузитьДанные.Доступность = Истина;
Элементы.ФормаЗагрузитьИзExcel.Доступность = Истина;
// письмерова 28.02.2023 BSLR-1434
Если НЕ Объект.ОтчетКомиссионераПродажа.Пустая() Тогда // если есть документы
Элементы.ФормаЗагрузитьДанные.Доступность = Ложь;
Элементы.ФормаЗагрузитьИзExcel.Доступность = Ложь;
КонецЕсли;
ИначеЕсли Объект.Проведен тогда
//Элементы.ФормаЗагрузитьДанные.Доступность = Ложь;
//Элементы.ФормаЗагрузитьИзExcel.Доступность = Ложь;
// письмерова 28.02.2023 BSLR-1434
Если НЕ Объект.ОтчетКомиссионераПродажа.Пустая()
Или Объект.Документы.Количество() Тогда // письмерова 07.09.2023 BSLR-2415 // если есть документы
Элементы.ФормаЗагрузитьДанные.Доступность = Ложь;
Элементы.ФормаЗагрузитьИзExcel.Доступность = Ложь;
Иначе
Элементы.ФормаЗагрузитьДанные.Доступность = Истина;
Элементы.ФормаЗагрузитьИзExcel.Доступность = Истина;
КонецЕсли;
//Элементы.ЛичныйКабинет.Доступность = Ложь;
Элементы.ЛичныйКабинет.ТолькоПросмотр = Истина;
Элементы.Период.Доступность = Ложь;
Элементы.ДатаНачала.Доступность = Ложь;
КонецЕсли;
Элементы.ГруппаВыкуп.Видимость = ЭтоWB или Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON"); // письмерова 13.10.2023 BSLR-1587
Элементы.ВозвратДляРасходаПоВыкупу.Видимость = ЭтоWB;
Элементы.РасходнаяНакладнаяВыкуп.Видимость = ЭтоWB;
Элементы.ВозвратПоВыкупуДляПередачиНаКомиссию.Видимость = ЭтоWB;
Элементы.ПередачаНаКомиссиюВозвратовПоВыкупу.Видимость = ЗначениеЗаполнено(Объект.ПередачаНаКомиссиюВозвратовПоВыкупу);//ЭтоWB;
Если ЭтоWB Тогда
Элементы.ПередачаНаКомиссиюВозвратовПоВыкупуУИД.Видимость = НЕ ЗначениеЗаполнено(Объект.ПередачаНаКомиссиюВозвратовПоВыкупу);
Иначе
Элементы.ПередачаНаКомиссиюВозвратовПоВыкупуУИД.Видимость = ЭтоWB;
КонецЕсли;
//Элементы.ПриходнаяНакладнаяВыкуп.Видимость = ЭтоWB;
Элементы.НомерВходящегоДокументаВыкупа.Видимость = ЭтоWB;
Элементы.ДатаВходящегоДокументаВыкупа.Видимость = ЭтоWB;
Элементы.ОтчетКомиссионераВозврат.Видимость = Ложь; // письмерова 15.05.2023 BSLR-1894
// письмерова 09.06.2023 BSLR-1982
Элементы.ТоварыОбоснованиеДляОплаты.Видимость = ЭтоWB;
Элементы.ВыкупОбоснованиеДляОплаты.Видимость = ЭтоWB;
// письмерова 18.07.2023 BSLR-2097
Элементы.УслугиЗагрузитьУслугиИзExcel.Видимость = Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет");
// счетчик документов
сч = 0;
Если ЗначениеЗаполнено(объект.ОтчетКомиссионераПродажа) Тогда
сч = сч + 1;
КонецЕсли;
Если ЗначениеЗаполнено(объект.ОтчетКомиссионераВозврат) Тогда
сч = сч + 1;
КонецЕсли;
Если ЗначениеЗаполнено(объект.ПриходнаяНакладная) Тогда
сч = сч + 1;
КонецЕсли;
Если ЗначениеЗаполнено(объект.ПриходнаяНакладнаяКомиссия) Тогда
сч = сч + 1;
КонецЕсли;
Если ЗначениеЗаполнено(объект.РасходнаяНакладнаяВыкуп) Тогда
сч = сч + 1;
КонецЕсли;
//Если ЗначениеЗаполнено(объект.ПриходнаяНакладнаяВыкуп) Тогда
// сч = сч + 1;
//КонецЕсли;
Если ЗначениеЗаполнено(объект.РасходнаяНакладнаяКомиссия) Тогда
сч = сч + 1;
КонецЕсли;
Если ЗначениеЗаполнено(объект.ВозвратДляРасходаПоВыкупу) Тогда
сч = сч + 1;
КонецЕсли;
Если ЗначениеЗаполнено(объект.ВозвратПоВыкупуДляПередачиНаКомиссию) Тогда
сч = сч + 1;
КонецЕсли;
Если ЗначениеЗаполнено(объект.ПередачаНаКомиссиюВозвратовПоВыкупу) Тогда
сч = сч + 1;
Иначе
// письмерова 19.04.2023 BSLR-1765
Если объект.ПередачаНаКомиссиюВозвратовПоВыкупуУИД <> "" Тогда
сч = сч + 1;
КонецЕсли;
КонецЕсли;
// письмерова 07.09.2023 BSLR-2415
// если ссылки пустые - скрываем группу ссылок на документы, оставляем только таб часть
Если сч = 0 Тогда
Элементы.ДокументыКолонки.Видимость = Ложь;
Иначе
Элементы.ТаблицаДокументов.Видимость = Ложь;
КонецЕсли;
Элементы.ТаблицаДокументов.Видимость = Ложь;//не Элементы.ДокументыКолонки.Видимость;
Если сч > 0 Тогда
Элементы.Документы.Заголовок = "Документы (" + сч + ")";
Иначе // письмерова 07.09.2023 BSLR-2415
сч = Объект.Документы.Количество();
Если сч > 0 Тогда
Элементы.Документы.Заголовок = "Документы (" + сч + ")";
Иначе
Элементы.Документы.Заголовок = "Документы";
КонецЕсли;
КонецЕсли;
// письмерова 12.09.2023 BSLR-2566
Элементы.ГруппаЗапросЯМ.Видимость = Ложь;
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет") ТОгда
Если Элементы.СсылкаНаСтрОтчета.Заголовок <> "" ТОгда
Элементы.ГруппаСсылкаНастрОтчетаПодсказка.Видимость = истина;
КонецЕсли;
Если ИДОтчета <> "" ТОгда
Элементы.ГруппаЗапросЯМ.Видимость = Истина;
КонецЕсли;
КонецЕсли;
ИспользуютсяГруппыДоступаКонтрагентов = ВернутьКонстантуГруппыДоступовКонтрагентов();
ВидимостьГруппаДоступа = ЭтоОзон ИЛИ ЭтоЯМ ИЛИ ЭтоWB; // BSLR-4698
Элементы.ГруппаДоступаПартнера.Видимость = ИспользуютсяГруппыДоступаКонтрагентов И ВидимостьГруппаДоступа;
// письмерова 17.10.2024 BSLR-3906
Элементы.ОтражатьКомиссионноеВознаграждениеОтдельнойУслугой.Видимость = ЭтоОзон Или ЭтоСбер; // BSLR-4190
// письмерова 24.10.2024 BSLR-3318
Элементы.Компенсации.Видимость = ЭтоОзон Или ЭтоWB; // BSLR-4460
Элементы.КомпенсацииЗагрузитьКомпенсацииИзExcel.Видимость = ЭтоОзон; // BSLR-4460
Элементы.КомпенсацииЗагрузитьДекомпенсацииИзExcel.Видимость = ЭтоОзон; // BSLR-4460
Элементы.КомпенсацииРазмерWB.Видимость = ЭтоWB; // BSLR-4460
// BSLR-3215 ++
Элементы.ГруппаПеревыставление.Видимость = ЭтоОзон;
Элементы.ЗагрузитьРеестрСФ.Доступность = Объект.ПеревыставлениеУслуг.Количество();
// письмерова 28.11.2024 BSLR-3215
Если НЕ РаспределятьПоПоставщикам(Объект.ЛичныйКабинет) Тогда
Элементы.ЗагрузитьРеестрСФ.Доступность = Ложь;
КонецЕсли;
Элементы.СоздатьДокументыПеревыставлениеУслуг.Доступность = Объект.ПеревыставлениеУслуг.Количество();
Элементы.ОчиститьДокументыПеревыставления.Доступность = Объект.ПеревыставлениеУслуг.Количество();
Если Объект.ПеревыставлениеУслуг.Количество() Тогда // BSLR-4203
Если ЕстьДокуметыПеревыставления() Тогда
Элементы.СоздатьДокументыПеревыставлениеУслуг.Доступность = Ложь;
Элементы.ОчиститьДокументыПеревыставления.Доступность = Истина;
Иначе
Элементы.СоздатьДокументыПеревыставлениеУслуг.Доступность = Истина;
Элементы.ОчиститьДокументыПеревыставления.Доступность = Ложь;
КонецЕсли;
УстановитьУсловноеОформлениеПеревыставлениеУслуг(); // BSLR-4423
КонецЕсли;
// BSLR-3215 --
// письмерова 28.11.2024 BSLR-4102
Элементы.ВыкупЗаказПокупателяМП.Видимость = Не ЭтоWB;
Элементы.ВыкупЦена.Видимость = Не ЭтоWB;
Элементы.ВыкупСумма.Видимость = Не ЭтоWB;
Элементы.ВыкупКомиссия.Видимость = Не ЭтоWB;
Элементы.ВыкупСуммаНДСВознаграждения.Видимость = Не ЭтоWB;
Элементы.ВыкупЗаказПокупателя.Видимость = Не ЭтоWB;
Элементы.ВыкупСтранаПродажи.Видимость = Не ЭтоWB;
Элементы.ВыкупЗаказПокупателяМП.Видимость = Не ЭтоWB;
Элементы.ВыкупЗаказПокупателяМП.Видимость = Не ЭтоWB;
Элементы.ВыкупЗаказПокупателяМП.Видимость = Не ЭтоWB;
Элементы.ВыкупСборкаТоваров.Видимость = Объект.ЗаменятьВРеализацииПоВыкупамНаборыНаКомплекты;
Элементы.ЗагружатьСуммуСкидокВУслугу.Видимость = Ложь; // BSLR-4195, BSLR-4508 - перенесен в ЛК
Элементы.ДекорацияЭкваринг.Видимость = Объект.Документы.Количество(); // BSLR-4378
Элементы.СоздаватьСначалаПродажиПотомВозвраты.Видимость = СоздаватьОтдельныйДокументПоВозвратам(ОБъект.ЛичныйКабинет); // BSLR-4351
Элементы.ТоварыЗапроситьРеестрЮрЛиц.Видимость = ЭтоWB; // BSLR-4698
Элементы.УслугиЗагрузитьОЗОН.Видимость = ЭтоОзон; // BSLR-3887
Элементы.ЗагрузитьВыкупыИзExcelOZONВозвраты.Видимость = ЭтоОзон; // BSLR-4287
// письмерова 30.01.2026 BSLR-5255
Элементы.ТаблицаДокументовЗаменитьСсылку.Видимость = ЕстьДокументСписаниеОтгруженныхТоваров();
КонецПроцедуры
// письмерова 30.01.2026 BSLR-5255
&НаСервереБезКонтекста
Функция ЕстьДокументСписаниеОтгруженныхТоваров()
Если Метаданные.Документы.Найти("СписаниеОтгруженныхТоваров") <> НЕопределено ТОгда
Возврат Истина;
Иначе
Возврат Ложь; Метаданные.Документы.Найти("СписаниеОтгруженныхТоваров")
КонецЕсли;
КонецФункции
// письмерова 14.11.2024 BSLR-3215
&НаСервереБезКонтекста
Функция РаспределятьПоПоставщикам(ЛК)
Возврат ЛК.СоздаватьОтдельныеДокументыДляУслугСНДС;
КонецФункции
// письмерова 28.02.2025 BSLR-4351
&НаСервереБезКонтекста
Функция СоздаватьОтдельныйДокументПоВозвратам(ЛК)
Возврат ЛК.СоздаватьОтдельныйДокументПоВозвратам;
КонецФункции
// письмерова 07.04.2025 BSLR-4462
&НаСервереБезКонтекста
Функция БратьСтавкуНДСИзНоменклатуры(ЛК)
Возврат ЛК.СтавкаНДСИзНоменклатуры;
КонецФункции
// письмерова 17.11.2023 BSLR-2814
&НаСервере
Процедура ПолучитьЗначениеСНО()
СНО = УчетнаяПолитикаПереопределяемый.СистемаНалогообложения(Объект.ЛичныйКабинет.Организация,Объект.Дата);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Период.ДатаНачала = Объект.ДатаНачала;
Период.ДатаОкончания = Объект.ДатаОкончания;
//ЛичныйКабинетПриИзменении(Элементы.ЛичныйКабинет);
ТекущийЛК = Объект.ЛичныйКабинет;// письмерова 12.02.2024 BSLR-3227
значенияКТ = ЛичныйКабинетПриИзмененииНаСервере(Объект.ЛичныйКабинет);
если значенияКТ.Свойство("ПометкаУдаления") тогда
сообщение = новый СообщениеПользователю;
сообщение.Текст = "В документе выбран личный кабинет, помеченный на удаление";
сообщение.Сообщить();
КонецЕсли;
Если ЗначениеЗаполнено(объект.ЛичныйКабинет) тогда
Клиент = значенияКТ.Клиент;
Токен = значенияКТ.Токен;
Токен2 = значенияКТ.Токен2;
Маркетплейс = значенияКТ.Маркетплейс;
УстановитьПериод();
КонецЕсли;
УстановитьВидимостьДоступность();
УстановитьУсловноеОформлениеКомпенсация(); //Крупа 09.04.2026 BSLR-5437
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьПредставлениеПериода(НачалоПериода = '00010101', КонецПериода = '00010101')
ТекстПериод = "";
Если ЗначениеЗаполнено(КонецПериода) Тогда
Если КонецПериода >= НачалоПериода Тогда
ТекстПериод = ПредставлениеПериода(НачалоДня(НачалоПериода), КонецДня(КонецПериода), "ФП = Истина");
Иначе
ТекстПериод = "";
КонецЕсли;
ИначеЕсли ЗначениеЗаполнено(НачалоПериода) Тогда
ТекстПериод = ПредставлениеПериода(НачалоДня(НачалоПериода), КонецДня(Дата(3999, 11, 11)), "ФП = Истина");
ТекстПериод = СтрЗаменить(ТекстПериод, Сред(ТекстПериод, СтрНайти(ТекстПериод, " - ")), " - ...");
КонецЕсли;
Возврат ТекстПериод;
КонецФункции
&НаСервере
Процедура ЗаполнитьСписокПериодов(СписокПериодов, НачалоСписка, ПределЗагрузки)
СписокПериодов.Очистить();
ЭтоОзон = Ложь;
ЭтоВБ = Ложь;
ЭтоЯМ = Ложь;
Если Объект.ЛичныйКабинет.ТорговаяПлощадка = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") ИЛи
Объект.ЛичныйКабинет.ТорговаяПлощадка = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") Тогда
ЭтоОзон = Истина;
ДатаНачала = НачалоСписка; // НачалоМесяца(НачалоСписка); - BSLR-3601
ДатаОкончания = НачалоМесяца(ПределЗагрузки);
ИначеЕсли Объект.ЛичныйКабинет.ТорговаяПлощадка = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
ЭтоВБ = Истина;
ДатаНачала = НачалоНедели(НачалоСписка);
ДатаОкончания = НачалоНедели(ПределЗагрузки);
ИначеЕсли Объект.ЛичныйКабинет.ТорговаяПлощадка = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет") Тогда
ЭтоЯМ = Истина;
ДатаНачала = НачалоМесяца(НачалоСписка);
ДатаОкончания = НачалоМесяца(ПределЗагрузки);
КонецЕсли;
ЭтоПерваяПоловина = ?(День(НачалоСписка)=1,Истина,Ложь); // письмерова 28.08.2024 BSLR-3601
Пока ДатаНачала >= ДатаОкончания Цикл
Если ЭтоОзон Тогда
Если Не Объект.ТолькоВыкупы Тогда // письмерова 28.08.2024 BSLR-3601
СписокПериодов.Добавить(ДатаНачала, ПолучитьПредставлениеПериода(ДатаНачала, КонецМесяца(ДатаНачала)));
ДатаНачала = НачалоМесяца(ДатаНачала - ИнтервалМеждуОтчетами(ЭтоОзон,ЭтоВБ,ЭтоЯМ));
Иначе
Если ЭтоПерваяПоловина Тогда
СписокПериодов.Добавить(ДатаНачала, ПолучитьПредставлениеПериода(ДатаНачала, КонецДня(ДатаНачала + 14*24*60*60)));
ДатаНачала = НачалоМесяца(ДобавитьМесяц(ДатаНачала,-1)) + 15*24*60*60;
ЭтоПерваяПоловина = Ложь;
Иначе
СписокПериодов.Добавить(ДатаНачала, ПолучитьПредставлениеПериода(ДатаНачала, КонецМесяца(ДатаНачала)));
ДатаНачала = НачалоМесяца(ДатаНачала);
ЭтоПерваяПоловина = Истина;
КонецЕсли;
КонецЕсли;
ИначеЕсли ЭтоВБ Тогда
// письмерова 11.01.2024 BSLR-3066
// заглушка для последней недели 2023 года
// вместо недели два периода 25.12-27.12 и 28.12.-31.12
Если ДатаНачала = Дата(2023,12,25) Тогда
СписокПериодов.Добавить(Дата(2023,12,28), ПолучитьПредставлениеПериода(Дата(2023,12,28), Дата(2023,12,31)));
СписокПериодов.Добавить(Дата(2023,12,25), ПолучитьПредставлениеПериода(Дата(2023,12,25), Дата(2023,12,27)));
ИначеЕсли ДатаНачала = Дата(2025,12,29) Тогда // BSLR-5212
СписокПериодов.Добавить(Дата(2026,1,1), ПолучитьПредставлениеПериода(Дата(2026,1,1), Дата(2026,1,4)));
СписокПериодов.Добавить(Дата(2025,12,29), ПолучитьПредставлениеПериода(Дата(2025,12,29), Дата(2025,12,31)));
Иначе // как обычно
СписокПериодов.Добавить(ДатаНачала, ПолучитьПредставлениеПериода(ДатаНачала, КонецНедели(ДатаНачала)));
КонецЕсли;
ДатаНачала = НачалоНедели(ДатаНачала - ИнтервалМеждуОтчетами(ЭтоОзон,ЭтоВБ,ЭтоЯМ));
ИначеЕсли ЭтоЯМ Тогда
СписокПериодов.Добавить(ДатаНачала, ПолучитьПредставлениеПериода(ДатаНачала, КонецМесяца(ДатаНачала)));
ДатаНачала = НачалоМесяца(ДатаНачала - ИнтервалМеждуОтчетами(ЭтоОзон,ЭтоВБ,ЭтоЯМ));
КонецЕсли;
КонецЦикла;
//добавим в список период который уже есть в документе
если ЗначениеЗаполнено(Объект.ДатаНачала) тогда
если СписокПериодов.НайтиПоЗначению(Объект.ДатаНачала) = Неопределено тогда
Если ЭтоОзон Тогда
СписокПериодов.Добавить(Объект.ДатаНачала, ПолучитьПредставлениеПериода(Объект.ДатаНачала, КонецМесяца(Объект.ДатаНачала)));
ИначеЕсли ЭтоВБ Тогда
СписокПериодов.Добавить(Объект.ДатаНачала, ПолучитьПредставлениеПериода(Объект.ДатаНачала, КонецНедели(Объект.ДатаНачала)));
ИначеЕсли ЭтоЯМ Тогда
СписокПериодов.Добавить(Объект.ДатаНачала, ПолучитьПредставлениеПериода(Объект.ДатаНачала, КонецМесяца(Объект.ДатаНачала)));
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ИнтервалМеждуОтчетами(ЭтоОзон = Ложь, ЭтоВБ = Ложь, ЭтоЯМ = Ложь)
Если ЭтоОзон тогда
Возврат 28*86400;
ИначеЕсли ЭтоВБ Тогда
Возврат 7*86400;
ИначеЕсли ЭтоЯМ Тогда
Возврат 28*86400;
КонецЕсли;
КонецФункции
&НаСервере
Процедура УстановитьПериод()
ЭтоОзон = Ложь;
ЭтоВБ = Ложь;
ЭтоЯМ = Ложь;
если Объект.РазрешитьЗагрузкуЗа12Месяцев тогда
КоличествоДнейДляРасчетаПределаЗагрузки = 365;
КоличествоДнейДляРасчетаПределаЗагрузкиЯМ = 365;
иначе
КоличествоДнейДляРасчетаПределаЗагрузки = 90;
КоличествоДнейДляРасчетаПределаЗагрузкиЯМ = 180;
КонецЕсли;
Если Объект.ЛичныйКабинет.ТорговаяПлощадка = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Или
Объект.ЛичныйКабинет.ТорговаяПлощадка = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") Тогда
ЭтоОзон = Истина;
НачалоПрошлогоПериода = НачалоМесяца(ДобавитьМесяц(ТекущаяДатаСеанса(), -1));
ПределЗагрузки = НачалоМесяца(ТекущаяДатаСеанса() - КоличествоДнейДляРасчетаПределаЗагрузки*86400);
Если Объект.ТолькоВыкупы Тогда // письмерова 28.08.2024 BSLR-3601
НачалоПрошлогоПериода = ?(День(ТекущаяДата()) > 15,НачалоМесяца(ТекущаяДатаСеанса()),
НачалоМесяца(ДобавитьМесяц(ТекущаяДатаСеанса(),-1)) + 14*24*60*60);
// Письмерова 10.03.2026 BSLR-5363
Если НачалоПрошлогоПериода = Дата(2026,2,15) ТОгда
НачалоПрошлогоПериода = Дата(2026,2,16);
КонецЕсли;
КонецЕсли;
ИначеЕсли Объект.ЛичныйКабинет.ТорговаяПлощадка = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
ЭтоВБ = Истина;
НачалоПрошлогоПериода = НачалоНедели(ТекущаяДатаСеанса() - ИнтервалМеждуОтчетами(, ЭтоВБ,));
ПределЗагрузки = НачалоНедели(ТекущаяДатаСеанса() - КоличествоДнейДляРасчетаПределаЗагрузки*86400);
ИначеЕсли Объект.ЛичныйКабинет.ТорговаяПлощадка = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет") Тогда
ЭтоЯМ = Истина;
НачалоПрошлогоПериода = НачалоМесяца(ДобавитьМесяц(ТекущаяДатаСеанса(), -1));
ПределЗагрузки = НачалоМесяца(ТекущаяДатаСеанса() - КоличествоДнейДляРасчетаПределаЗагрузкиЯМ*86400);
КонецЕсли;
//НачалоПрошлойНедели = НачалоНедели(ТекущаяДатаСеанса() - ИнтервалМеждуОтчетами());
//ВБ и ОЗОН хранит данные за последние 90 дней
//ПределЗагрузки = НачалоНедели(ТекущаяДатаСеанса() - 90*86400);
//Для ЯМ данные собираем за полгода
СписокПериодов = Новый СписокЗначений;
ЗаполнитьСписокПериодов(СписокПериодов, НачалоПрошлогоПериода, ПределЗагрузки);
Элемент = Элементы.ДатаНачала;
// Чтобы избежать дублирования элементов, очищаем список выбора в поле формы
Элемент.СписокВыбора.Очистить();
УдалитьПроведенныеПериоды(СписокПериодов, Объект.ЛичныйКабинет, Объект.Ссылка,Объект.ТолькоВыкупы);
Для каждого ЭлПериод Из СписокПериодов Цикл
Элемент.СписокВыбора.Добавить(ЭлПериод.Значение, ЭлПериод.Представление);
КонецЦикла;
Если ЗначениеЗаполнено(Объект.ДатаВходящегоДокумента) Тогда
ДатаНачала = НачалоНедели(Объект.ДатаВходящегоДокумента);
Если ЭтоОзон тогда
ДатаНачала = НачалоМесяца(Объект.ДатаВходящегоДокумента);
ИначеЕсли ЭтоВБ Тогда
ДатаНачала = НачалоНедели(Объект.ДатаВходящегоДокумента);
ИначеЕсли ЭтоЯМ Тогда
ДатаНачала = НачалоМесяца(Объект.ДатаВходящегоДокумента);
КонецЕсли;
Иначе
ДатаНачала = НачалоПрошлогоПериода;
КонецЕсли;
ДатаНачала = Макс(ПределЗагрузки, ДатаНачала);
КонецПроцедуры
&НаСервереБезКонтекста
Процедура УдалитьПроведенныеПериоды(СписокПериодов, ЛичныйКабинет, Ссылка, ТолькоВыкупы = Ложь)
Если ТолькоВыкупы Тогда // только озон выкупы - письмерова 30.08.2024 BSLR-3601
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| топ_ЗарузкаОтчетовКомиссионера.ДатаНачала КАК ДатаНачала
|ИЗ
| Документ.топ_ЗарузкаОтчетовКомиссионера КАК топ_ЗарузкаОтчетовКомиссионера
|ГДЕ
| топ_ЗарузкаОтчетовКомиссионера.ДатаНачала В(&ДатаНачала)
| И топ_ЗарузкаОтчетовКомиссионера.ЛичныйКабинет = &ЛичныйКабинет
| И топ_ЗарузкаОтчетовКомиссионера.Проведен
| И топ_ЗарузкаОтчетовКомиссионера.ТолькоВыкупы
| И топ_ЗарузкаОтчетовКомиссионера.Ссылка <> &Ссылка
|
|СГРУППИРОВАТЬ ПО
| топ_ЗарузкаОтчетовКомиссионера.ДатаНачала";
Запрос.УстановитьПараметр("ДатаНачала", СписокПериодов);
Запрос.УстановитьПараметр("ЛичныйКабинет", ЛичныйКабинет);
Запрос.УстановитьПараметр("Ссылка", Ссылка);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
НайденныйЭлемент = СписокПериодов.НайтиПоЗначению(Выборка.ДатаНачала);
Если Выборка.ДатаНачала <> Ссылка.ДатаНачала Тогда
СписокПериодов.Удалить(НайденныйЭлемент);
КонецЕсли;
КонецЦикла;
Иначе // общие код для всех BSLR-3601
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| топ_ЗарузкаОтчетовКомиссионера.ДатаНачала КАК ДатаНачала
|ИЗ
| Документ.топ_ЗарузкаОтчетовКомиссионера КАК топ_ЗарузкаОтчетовКомиссионера
|ГДЕ
| топ_ЗарузкаОтчетовКомиссионера.ДатаНачала В(&ДатаНачала)
| И топ_ЗарузкаОтчетовКомиссионера.ЛичныйКабинет = &ЛичныйКабинет
| И топ_ЗарузкаОтчетовКомиссионера.Проведен
| И топ_ЗарузкаОтчетовКомиссионера.Ссылка <> &Ссылка
// письмерова 17.09.2024 BSLR-3601
| И НЕ топ_ЗарузкаОтчетовКомиссионера.ТолькоВыкупы
|
// письмерова 30.05.2023 BSLR-1984
|СГРУППИРОВАТЬ ПО
| топ_ЗарузкаОтчетовКомиссионера.ДатаНачала";
Запрос.УстановитьПараметр("ДатаНачала", СписокПериодов);
Запрос.УстановитьПараметр("ЛичныйКабинет", ЛичныйКабинет);
Запрос.УстановитьПараметр("Ссылка", Ссылка);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
НайденныйЭлемент = СписокПериодов.НайтиПоЗначению(Выборка.ДатаНачала);
// письмерова 19.04.2023 BSLR-1758
Если Выборка.ДатаНачала <> Ссылка.ДатаНачала Тогда
СписокПериодов.Удалить(НайденныйЭлемент);
КонецЕсли;
КонецЦикла;
КонецЕсли; // BSLR-3601
КонецПроцедуры
&НаКлиенте
Процедура ПериодПриИзменении(Элемент)
Объект.Компенсации.Очистить(); //Крупа BSLR-5157
Объект.ДатаНачала = НачалоДня(Период.ДатаНачала);
Объект.ДатаОкончания = КонецДня(Период.ДатаОкончания);
УстановитьВидимостьДоступность();
// письмерова 11.12.2025 BSLR-5126
Если ЗначениеЗаполнено(Объект.ДатаОкончания) ТОгда
ЗначениеОсновнойСтавкиНДС = топ_ОбщийВызовСервера.ЗначениеОсновнойСтакиНДС(Объект.ДатаОкончания);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ДатаНачала()
Возврат Объект.Ссылка.ДатаНачала;
КонецФункции
&НаКлиенте
Процедура ДатаНачалаПриИзменении(Элемент)
СтараяДатаНач = ДатаНачала();
если НЕ Объект.ДатаНачала = СтараяДатаНач тогда
Если Объект.Товары.Количество() или Объект.Услуги.Количество() или Объект.Выкуп.Количество() или Объект.Компенсации.Количество() Тогда //Крупа BSLR-5157
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопросОбОчищенииТаблицыПриСменеДаты", ЭтаФорма, СтараяДатаНач);
ПоказатьВопрос(ОписаниеОповещения, "При смене периода таблицы будут очищены, изменить период?", РежимДиалогаВопрос.ДаНет);
КонецЕсли;
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Или
Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") Тогда
Объект.ДатаОкончания = КонецМесяца(Объект.ДатаНачала);
Период.ДатаНачала = Объект.ДатаНачала;
//Период.ДатаОкончания = КонецМесяца(Объект.ДатаНачала); BSLR-3601
Если Не Объект.ТолькоВыкупы Тогда
Период.ДатаОкончания = КонецМесяца(Объект.ДатаНачала);
Иначе
Период.ДатаОкончания = ?(День(Объект.ДатаНачала) >1, КонецМесяца(Объект.ДатаНачала), (Объект.ДатаНачала+ 14*24*60*60 ));
Объект.ДатаОкончания = Период.ДатаОкончания;
КонецЕсли;
ИначеЕсли Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
// письмерова 11.01.2024 BSLR-3066
// заглушка для последней недели 2023 года
// вместо недели два периода 25.12-27.12 и 28.12.-31.12
Если Объект.ДатаНачала = Дата(2023,12,25) Тогда
Объект.ДатаОкончания = Дата(2023,12,27);
Период.ДатаНачала = Объект.ДатаНачала;
Период.ДатаОкончания = Объект.ДатаОкончания;
ИначеЕсли Объект.ДатаНачала = Дата(2023,12,28) Тогда
Объект.ДатаОкончания = Дата(2023,12,31);
Период.ДатаНачала = Объект.ДатаНачала;
Период.ДатаОкончания = Объект.ДатаОкончания;
// BSLR-5212
ИначеЕсли Объект.ДатаНачала = Дата(2025,12,29) Тогда
Объект.ДатаОкончания = Дата(2025,12,31);
Период.ДатаНачала = Объект.ДатаНачала;
Период.ДатаОкончания = Объект.ДатаОкончания;
ИначеЕсли Объект.ДатаНачала = Дата(2026,1,1) Тогда
Объект.ДатаОкончания = Дата(2026,1,4);
Период.ДатаНачала = Объект.ДатаНачала;
Период.ДатаОкончания = Объект.ДатаОкончания;
Иначе
Объект.ДатаОкончания = КонецНедели(Объект.ДатаНачала);
Период.ДатаНачала = Объект.ДатаНачала;
Период.ДатаОкончания = КонецНедели(Объект.ДатаНачала);
КонецЕсли;
ИначеЕсли Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет") Тогда
Объект.ДатаОкончания = КонецМесяца(Объект.ДатаНачала);
Период.ДатаНачала = Объект.ДатаНачала;
Период.ДатаОкончания = КонецМесяца(Объект.ДатаНачала);
КонецЕсли;
Иначе //письмерова 11.01.2024 BSLR-3066
Объект.ДатаОкончания = Период.ДатаОкончания;
КонецЕсли;
// письмерова 03.12.2024 BSLR-3621
Объект.ДатаТиповыхДокументов = Объект.ДатаОкончания;
УстановитьВидимостьДоступность();
// письмерова 11.12.2025 BSLR-5126
Если ЗначениеЗаполнено(Объект.ДатаОкончания) ТОгда
ЗначениеОсновнойСтавкиНДС = топ_ОбщийВызовСервера.ЗначениеОсновнойСтакиНДС(Объект.ДатаОкончания);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеОтветаНаВопросОбОчищенииТаблицыПриСменеДаты(Результат, СтараяДатаНач) Экспорт
Если Результат = КодВозвратаДиалога.Нет Тогда
Объект.ДатаНачала = СтараяДатаНач;
КонецЕсли;
Если Результат = КодВозвратаДиалога.Да Тогда
Объект.Товары.Очистить();
Объект.Услуги.Очистить();
//LAShadrin 28/03/23
Объект.Выкуп.Очистить();
// Крупа BSLR-5157
Объект.Компенсации.Очистить();
КонецЕсли;
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Или
Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") Тогда
Объект.ДатаОкончания = КонецМесяца(Объект.ДатаНачала);
Период.ДатаНачала = Объект.ДатаНачала;
Период.ДатаНачала = КонецМесяца(Объект.ДатаНачала);
ИначеЕсли Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
Объект.ДатаОкончания = КонецНедели(Объект.ДатаНачала);
Период.ДатаНачала = Объект.ДатаНачала;
Период.ДатаНачала = КонецНедели(Объект.ДатаНачала);
ИначеЕсли Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет") Тогда
Объект.ДатаОкончания = КонецМесяца(Объект.ДатаНачала);
Период.ДатаНачала = Объект.ДатаНачала;
Период.ДатаНачала = КонецМесяца(Объект.ДатаНачала);
КонецЕсли;
УстановитьВидимостьДоступность();
КонецПроцедуры
&НаСервере
Функция ЛичныйКабинетПриИзмененииНаСервере(ЛичныйКабинет)
стрРезультат = новый Структура;
стрРезультат.Вставить("Отказ", Ложь);
если ЛичныйКабинет.ПометкаУдаления тогда
стрРезультат.Вставить("ПометкаУдаления",истина);
КонецЕсли;
если ЛичныйКабинет.ТорговаяПлощадка = Перечисления.топ_ТорговыеПлощадки.OZON тогда
стрРезультат.Вставить("Клиент", Объект.ЛичныйКабинет.ID_Поставщика);
стрРезультат.Вставить("Токен", Объект.ЛичныйКабинет.API_Key);
стрРезультат.Вставить("Токен2","");
Если топ_УТсервер.ПолучитьСкладДляВыкупов(Объект.ЛичныйКабинет) = Справочники.Склады.ПустаяСсылка() ТОгда // BSLR-4537, BSLR-4616
ОбщегоНазначения.СообщитьПользователю("Не удалось определить склад для выкупов, заполните реквизит ""Склад"" в личном кабинете, на вкладке ""Отчет комиссионера""");
КонецЕсли;
ИначеЕсли ЛичныйКабинет.ТорговаяПлощадка = Перечисления.топ_ТорговыеПлощадки.Wildberries тогда
стрРезультат.Вставить("Клиент", Объект.ЛичныйКабинет.ID_Поставщика_WB);
Если Объект.ЛичныйКабинет.ИспользоватьНовыйAPIWB Тогда
стрРезультат.Вставить("Токен", Объект.ЛичныйКабинет.API_Key_СтатистикаNEW);
Иначе
стрРезультат.Вставить("Токен", Объект.ЛичныйКабинет.API_Key_Статистика);
КонецЕсли;
стрРезультат.Вставить("Токен2", Объект.ЛичныйКабинет.API_Key);
Если топ_УТсервер.ПолучитьСкладДляВыкупов(Объект.ЛичныйКабинет) = Справочники.Склады.ПустаяСсылка() ТОгда // BSLR-4537, BSLR-4616
ОбщегоНазначения.СообщитьПользователю("Не удалось определить склад для выкупов, заполните реквизит ""Склад"" в личном кабинете, на вкладке ""Отчет комиссионера""");
КонецЕсли;
ИначеЕсли ЛичныйКабинет.ТорговаяПлощадка = Перечисления.топ_ТорговыеПлощадки.ЯндексМаркет тогда
// письмерова 14.01.2025 BSLR-4190
Если ЛичныйКабинет.СхемаРаботыЯндексМаркет = Перечисления.топ_СхемыРаботыЯМ.Агентская Тогда
стрРезультат.Отказ = Истина;
КонецЕсли;
стрРезультат.Вставить("Клиент", "ЯМ");
стрРезультат.Вставить("Токен", "ЯМ");
стрРезультат.Вставить("Токен2", "ЯМ");
ИначеЕсли ЛичныйКабинет.ТорговаяПлощадка = Перечисления.топ_ТорговыеПлощадки.СберМегаМаркет Тогда
// не нужен, т.к. пока только загрузка из файлов
стрРезультат.Вставить("Клиент", "123");
стрРезультат.Вставить("Токен", "");
стрРезультат.Вставить("Токен2","");
Иначе // письмерова
стрРезультат.Вставить("Клиент", "123");
стрРезультат.Вставить("Токен", "");
стрРезультат.Вставить("Токен2","");
КонецЕсли;
стрРезультат.Вставить("Маркетплейс",ЛичныйКабинет.ТорговаяПлощадка);
// ++ Куряев 20.12.2023 BSLR-2824
Если ЛичныйКабинет.ТорговаяПлощадка <> Перечисления.топ_ТорговыеПлощадки.СберМегаМаркет Тогда
КоличествоДублейШК = топ_ОбщийВызовСервера.НайтиДублиШтрихкодовСервер(Объект.ЛичныйКабинет);
Если КоличествоДублейШК > 0 Тогда
ОбщегоНазначения.СообщитьПользователю("Найдены дубли штрихкодов товаров. Перейдите на форму товаров торговых площадок и удалите дубли");
КонецЕсли;
КонецЕсли;
// Куряев 20.12.2023 BSLR-2824
Возврат стрРезультат;
КонецФункции
&НаКлиенте
Процедура ЛичныйКабинетПриИзменении(Элемент)
ОчиститьСообщения(); // письмерова 30.01.2024 BSLR-3146
значенияКТ = ЛичныйКабинетПриИзмененииНаСервере(Объект.ЛичныйКабинет);
если значенияКТ.Свойство("ПометкаУдаления") тогда
сообщение = новый СообщениеПользователю;
сообщение.Текст = "Нельзя выбрать личный кабинет, помеченный на удаление";
сообщение.Сообщить();
объект.ЛичныйКабинет = Неопределено;
Возврат;
КонецЕсли;
если значенияКТ.Отказ тогда
сообщение = новый СообщениеПользователю;
сообщение.Текст = "Загрузка отчетов комиссионера не предусмотрена по агентской схеме. Для выполнения данной операции измените в настройках личного кабинета схему на ""Работа по отчету комиссионера""";
сообщение.Сообщить();
объект.ЛичныйКабинет = Неопределено;
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(объект.ЛичныйКабинет) тогда
//СтарыйЛК = ЛичныйКабинет(); - письмерова 12.02.2024 BSLR-3227
если НЕ Объект.ЛичныйКабинет = ТекущийЛК тогда // письмерова 12.02.2024 BSLR-3227
Если Объект.Товары.Количество() или Объект.Услуги.Количество() или Объект.Выкуп.Количество() Или Объект.ПеревыставлениеУслуг.Количество()Тогда // BSLR-4203
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопросОбОчищенииТаблицыПриСменеЛК", ЭтаФорма, ТекущийЛК);// письмерова 12.02.2024 BSLR-3227
ПоказатьВопрос(ОписаниеОповещения, "При смене личного кабинета таблицы будут очищены изменить личный кабинет?", РежимДиалогаВопрос.ДаНет);
иначе
Объект.ДатаНачала = дата('0001.01.01 00:00:00');
Объект.ДатаОкончания = дата('0001.01.01 00:00:00');
// письмерова 12.02.2024 BSLR-3227
ТекущийЛК = Объект.ЛичныйКабинет;
Клиент = значенияКТ.Клиент;
Токен = значенияКТ.Токен;
Токен2 = значенияКТ.Токен2;
Маркетплейс = значенияКТ.Маркетплейс;
УстановитьПериод();
КонецЕсли;
Иначе
ТекущийЛК = Объект.ЛичныйКабинет; // письмерова 12.02.2024 BSLR-3227
Клиент = значенияКТ.Клиент;
Токен = значенияКТ.Токен;
Токен2 = значенияКТ.Токен2;
Маркетплейс = значенияКТ.Маркетплейс;
УстановитьПериод();
КонецЕсли;
КонецЕсли;
УстановитьВидимостьДоступность();
КонецПроцедуры
&НаКлиенте
Процедура ПослеОтветаНаВопросОбОчищенииТаблицыПриСменеЛК(Результат, СтарыйЛК) Экспорт
Если Результат = КодВозвратаДиалога.Нет Тогда
Объект.ЛичныйКабинет = ТекущийЛК;// письмерова 12.02.2024 BSLR-3227
Если ЗначениеЗаполнено(Объект.ЛичныйКабинет) Тогда
значенияКТ = ЛичныйКабинетПриИзмененииНаСервере(Объект.ЛичныйКабинет);
Клиент = значенияКТ.Клиент;
Токен = значенияКТ.Токен;
Токен2 = значенияКТ.Токен2;
Маркетплейс = значенияКТ.Маркетплейс;
УстановитьПериод();
Иначе
Клиент = значенияКТ.Клиент;
Токен = значенияКТ.Токен;
Токен2 = значенияКТ.Токен2;
Маркетплейс = значенияКТ.Маркетплейс;
КонецЕсли;
КонецЕсли;
Если Результат = КодВозвратаДиалога.Да Тогда
Объект.ДатаНачала = дата('0001.01.01 00:00:00');
Объект.ДатаОкончания = дата('0001.01.01 00:00:00');
Объект.Товары.Очистить();
Объект.Услуги.Очистить();
//BSLR-4203
Объект.Выкуп.Очистить();
ОчиститьСсылкиНаДокументыНаСервере();
Объект.ПеревыставлениеУслуг.Очистить();
УстановитьПериод();//письмерова 11.01.2024 BSLR-3066
ТекущийЛК = Объект.ЛичныйКабинет; // письмерова 12.02.2024 BSLR-3227
//BSLR-3639, Чупраков А.Н., 02.07.24
значенияКТ = ЛичныйКабинетПриИзмененииНаСервере(Объект.ЛичныйКабинет);
Маркетплейс = значенияКТ.Маркетплейс;
КонецЕсли;
УстановитьВидимостьДоступность();
КонецПроцедуры
// письмерова 30.01.2026 BSLR-5255
&НаКлиенте
Процедура ЗаменитьСсылку(Команда)
ТекущиеДанные = Элементы.ТаблицаДокументов.ТекущиеДанные;
Если СтрНайти(ТекущиеДанные.ДокументНавигационнаяСсылка,"ОтчетОСписанииТоваровУХранителя" ) > 0 ТОгда
ТекущиеДанные.ДокументНавигационнаяСсылка = СтрЗаменить(ТекущиеДанные.ДокументНавигационнаяСсылка,"ОтчетОСписанииТоваровУХранителя", "СписаниеОтгруженныхТоваров");
ТекущиеДанные.ДокументУИД = СтрЗаменить(ТекущиеДанные.ДокументУИД,"Отчет о списании товаров у комиссионера", "Списание товаров, отгруженных комиссионеру");
Иначе
ОбщегоНазначенияКлиент.СообщитьПользователю("Выберете строку с документом ""Отчет о списании товаров у комиссионера"",
|для других видов документов замена ссылки не предусмотрена.");
КонецЕсли;
КонецПроцедуры
// письмерова 08.05.2026 BSLR-5340
&НаКлиенте
Процедура ЗаменитьСсылкуДерево(Команда)
ТекущиеДанные = Элементы.ДеревоДокументов.ТекущиеДанные;
Если СтрНайти(ТекущиеДанные.ДокументНавигационнаяСсылка,"ОтчетОСписанииТоваровУХранителя" ) > 0 ТОгда
ТекущиеДанные.ДокументНавигационнаяСсылка = СтрЗаменить(ТекущиеДанные.ДокументНавигационнаяСсылка,"ОтчетОСписанииТоваровУХранителя", "СписаниеОтгруженныхТоваров");
ТекущиеДанные.ДокументУИД = СтрЗаменить(ТекущиеДанные.ДокументУИД,"Отчет о списании товаров у комиссионера", "Списание товаров, отгруженных комиссионеру");
Иначе
ОбщегоНазначенияКлиент.СообщитьПользователю("Выберете строку с документом ""Отчет о списании товаров у комиссионера"",
|для других видов документов замена ссылки не предусмотрена.");
КонецЕсли;
КонецПроцедуры
#область загрузкаПоАПИ
&НаСервереБезКонтекста
Функция проверитьНаличиеДокументовПоВБ(ДатаНачала,ДатаОкончания,ЛичныйКабинет)
результат = новый Структура("ЕстьДокументы, Сообщение",
ложь, "");
запрос = новый запрос;
запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
| топ_ЗарузкаОтчетовКомиссионера.Ссылка КАК Ссылка
|ИЗ
| Документ.топ_ЗарузкаОтчетовКомиссионера КАК топ_ЗарузкаОтчетовКомиссионера
|ГДЕ
| топ_ЗарузкаОтчетовКомиссионера.Проведен = ИСТИНА
| И топ_ЗарузкаОтчетовКомиссионера.ДатаНачала = &ДатаНачала
| И топ_ЗарузкаОтчетовКомиссионера.ДатаОкончания = &ДатаОкончания
| И топ_ЗарузкаОтчетовКомиссионера.ЛичныйКабинет = &ЛичныйКабинет";
запрос.УстановитьПараметр("ДатаНачала",ДатаНачала);
запрос.УстановитьПараметр("ДатаОкончания",ДатаОкончания);
запрос.УстановитьПараметр("ЛичныйКабинет",ЛичныйКабинет);
РезультатЗапроса=запрос.Выполнить().Выгрузить();
если РезультатЗапроса.Количество() тогда
результат.ЕстьДокументы = Истина;
результат.Сообщение = "За период с " + строка(ДатаНачала) + " по " + строка(ДатаОкончания)+
" уже есть проведённый долкумент Зарузка отчетов комиссионера " + строка(РезультатЗапроса[0].Ссылка) +
" перезаполните его, или распроведите.";
КонецЕсли;
Возврат результат;
КонецФункции
&НаКлиенте
Процедура ЗагрузитьДанныеAPI(Команда)
ЭтоЯМ = Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет");
ЭтоWB = Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries");
ЭтоОзон = Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON");
ИспользуютсяЮЛ = ЭтоЯМ ИЛИ ЭтоОзон;
ИспользуютсяГруппыДоступаКонтрагентов = ВернутьКонстантуГруппыДоступовКонтрагентов();
Если ИспользуютсяЮЛ И ИспользуютсяГруппыДоступаКонтрагентов И НЕ ЗначениеЗаполнено(ГруппаДоступаПартнера) И СоздаватьКонтрагентов Тогда
сообщение = новый СообщениеПользователю;
сообщение.Текст = "Заполните поле Группа доступа партнера";
сообщение.Сообщить();
Возврат;
КонецЕсли;
если (не ЗначениеЗаполнено(Объект.ДатаНачала)) или (не ЗначениеЗаполнено(Объект.ДатаОкончания)) тогда
сообщение = новый СообщениеПользователю;
сообщение.Текст = "Заполните поле Период";
сообщение.Сообщить();
Возврат;
КонецЕсли;
если не ЗначениеЗаполнено(Объект.ЛичныйКабинет)тогда
сообщение = новый СообщениеПользователю;
сообщение.Текст = "Выберите Личный Кабинет";
сообщение.Сообщить();
Возврат;
КонецЕсли;
Если Объект.ДатаНачала > Объект.ДатаОкончания Тогда
ВременнаяПеременная = Объект.ДатаНачала;
Объект.ДатаНачала = Объект.ДатаОкончания;
Объект.ДатаОкончания = ВременнаяПеременная;
КонецЕсли;
//проверим чтоб для WB период был неделя и небыло уже проведённых документов за эту неделю
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
РезультатПроверки=проверитьНаличиеДокументовПоВБ(Объект.ДатаНачала,Объект.ДатаОкончания,Объект.ЛичныйКабинет);
если РезультатПроверки.ЕстьДокументы тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(РезультатПроверки.Сообщение);
Возврат;
КонецЕсли;
КонецЕсли;
ПараметрыЗапуска = Новый Структура;
ПараметрыЗапуска.Вставить("Клиент", Клиент);
ПараметрыЗапуска.Вставить("Токен", Токен);
ПараметрыЗапуска.Вставить("Токен2", Токен2);
ПараметрыЗапуска.Вставить("ДатаНачала", НачалоДня(Объект.ДатаНачала));//Объект.ДатаНачала);
ПараметрыЗапуска.Вставить("ДатаОкончания", КонецДня(Объект.ДатаОкончания)); //Объект.ДатаОкончания);
ПараметрыЗапуска.Вставить("СуммаУслугХранения", Объект.СуммаУслугХранения+Объект.СумаУслугПлатнойПриемки+Объект.СуммаДоплаты);
ПараметрыЗапуска.Вставить("ЛичныйКабинет", Объект.ЛичныйКабинет);
ПараметрыЗапуска.Вставить("ВыгружатьДетализацию", Объект.ВыгужатьДетализациюWB_Excel);//Lashadrin BSLR-1338
ПараметрыЗапуска.Вставить("МП", Маркетплейс);
ПараметрыЗапуска.Вставить("ПродажиВРБВПродажахРФ", Объект.ПродажиВРБВПродажахРФ);
ПараметрыЗапуска.Вставить("УдержатьСуммуДоставкиПриВыкупе", Объект.УдержатьСуммуДоставкиПриВыкупе);
// письмерова 08.07.2024 BSLR-3667
ПараметрыЗапуска.Вставить("ВключитьВСуммуКомиссииИздержкиПоПеревозке", Объект.ВключитьВСуммуКомиссииИздержкиПоПеревозке);
ПараметрыЗапуска.Вставить("ВключитьВСуммуКомиссииВесьЭкваринг", Объект.ВключитьВСуммуКомиссииВесьЭкваринг);
СтруктураФоновогоЗадания = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ЗагрузитьДанныеОтчетКоммисионера(ПараметрыЗапуска, УникальныйИдентификатор);
ИДЗадания = СтруктураФоновогоЗадания.ИдентификаторЗадания;
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ПараметрыОжидания.ВыводитьПрогрессВыполнения = Истина;
ПараметрыОжидания.Интервал = 2;
ДлительныеОперацииКлиент.ОжидатьЗавершение(СтруктураФоновогоЗадания, Новый ОписаниеОповещения("ПослеВыполненияКомандыВФоне", ЭтотОбъект), ПараметрыОжидания);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыполненияКомандыВФоне(Результат, ДополнительныеПараметры) Экспорт
Если ТипЗнч(Результат) = Тип("Структура") Тогда
Если Результат.Статус = "Выполнено" Тогда //получили результат
// письмерова 16.04.2026 BSLR-5483
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда
ОбработатьРезультатЗагрузкиУслугНаСервере(Результат.АдресРезультата);
Иначе // BSLR-5483
РезультатВыполнения = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
// письмерова 12.09.2023 BSLR-2566
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет") ТОгда
Если РезультатВыполнения.Ошибка Тогда
ПоказатьОповещениеПользователя(,,РезультатВыполнения.Сообщение,
БиблиотекаКартинок.Ошибка32,
СтатусОповещенияПользователя.Информация);
Иначе
Если РезультатВыполнения.ИДОтчета <> "" ТОгда // все норм
// получили только ссылку на отчет
ИДОтчета = РезультатВыполнения.ИДОтчета;
Таймаут = РезультатВыполнения.Таймаут;
УстановитьВидимостьДоступность();
ПоказатьПредупреждение(Новый ОписаниеОповещения("ПослеЗапросаГенерацииОтчета",ЭтотОбъект),"Получена ссылка на отчет, скачивание начнется через 10 с, не закрывайте документ.",10);
Иначе // нет ИД отчета
ПоказатьОповещениеПользователя(,,"Не получен ID отчета, попробуйте загрузить данные позже.",
БиблиотекаКартинок.Ошибка32,
СтатусОповещенияПользователя.Информация);
КонецЕсли;
КонецЕсли;
Иначе // обычная схема для всех
Если ТипЗнч(РезультатВыполнения) = Тип("Структура") Тогда
Если НЕ РезультатВыполнения.Ошибка тогда //проверим на ошибку в результате
Если ТипЗнч(РезультатВыполнения) = Тип("Структура") Тогда
ОбновитьДанныеФормыНаКлиенте(РезультатВыполнения, ДополнительныеПараметры);
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
ОбновитьДанныеФормыНаКлиенте_Выкуп(РезультатВыполнения, ДополнительныеПараметры);
КонецЕсли;
Если ЗначениеЗаполнено(РезультатВыполнения.Сообщение) Тогда
ПоказатьОповещениеПользователя(,,РезультатВыполнения.Сообщение,
БиблиотекаКартинок.Предупреждение32,
СтатусОповещенияПользователя.Информация);
КонецЕсли;
ЭтаФорма.Модифицированность = Истина;
КонецЕсли;
иначе // в результате ошибка
ПоказатьОповещениеПользователя(,,РезультатВыполнения.Сообщение,
БиблиотекаКартинок.Информация,
СтатусОповещенияПользователя.Информация);
КонецЕсли;
КонецЕсли;
КонецЕсли; // типовая схема для всех
УдалитьИзВременногоХранилища(Результат.АдресРезультата);
КонецЕсли; // BSLR-5483
ИначеЕсли Результат.Статус = "Ошибка" Тогда //не получили результат
ПоказатьОповещениеПользователя(,,Результат.КраткоеПредставлениеОшибки,
БиблиотекаКартинок.Ошибка32,
СтатусОповещенияПользователя.Информация);
КонецЕсли;
КонецЕсли;
// письмерова 09.11.2023 BSLR-2599
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда
Если ЕстьПродажиЮЛ() Тогда
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопросОЗагрузкеДанныхЮЛ", ЭтаФорма);
ПоказатьВопрос(ОписаниеОповещения, "Таблица заказов загружена, обнаружены продажи юридическим лицам. Загрузить данные о юридических лицах?", РежимДиалогаВопрос.ДаНет,600);
КонецЕсли;
КонецЕсли;
// письмерова 02.09.2025 BSLR-4698
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") ТОгда
Если ЕстьПродажиЮЛ() Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю("Есть продажи юр.лицам за период, загрузите данные по продажам юр.лицам");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыполненияКомандыВФоне_Выкуп(Результат, ДополнительныеПараметры) Экспорт
Если ТипЗнч(Результат) = Тип("Структура") Тогда
Если Результат.Статус = "Выполнено" Тогда //получили результат
РезультатВыполнения = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
Если ТипЗнч(РезультатВыполнения) = Тип("Структура") Тогда
Если НЕ РезультатВыполнения.Ошибка тогда //проверим на ошибку в результате
Если ТипЗнч(РезультатВыполнения) = Тип("Структура") Тогда
ОбновитьДанныеФормыНаКлиенте_Выкуп(РезультатВыполнения, ДополнительныеПараметры);
Если ЗначениеЗаполнено(РезультатВыполнения.Сообщение) Тогда
ПоказатьОповещениеПользователя(,,РезультатВыполнения.Сообщение,
БиблиотекаКартинок.Предупреждение32,
СтатусОповещенияПользователя.Информация);
КонецЕсли;
КонецЕсли;
иначе // в результате ошибка
ПоказатьОповещениеПользователя(,,РезультатВыполнения.Сообщение,
БиблиотекаКартинок.Информация,
СтатусОповещенияПользователя.Информация);
КонецЕсли;
КонецЕсли;
УдалитьИзВременногоХранилища(Результат.АдресРезультата);
ИначеЕсли Результат.Статус = "Ошибка" Тогда //не получили результат
ПоказатьОповещениеПользователя(,,Результат.КраткоеПредставлениеОшибки,
БиблиотекаКартинок.Ошибка32,
СтатусОповещенияПользователя.Информация);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// только ЯМ, письмерова 12.09.2023 BSLR-2566
&НаКлиенте
Процедура ПослеЗапросаГенерацииОтчета(Результат)Экспорт
ПараметрыЗапуска = Новый Структура;
ПараметрыЗапуска.Вставить("Клиент", Клиент);
ПараметрыЗапуска.Вставить("Токен", Токен);
ПараметрыЗапуска.Вставить("Токен2", Токен2);
ПараметрыЗапуска.Вставить("ДатаНачала", НачалоДня(Объект.ДатаНачала));
ПараметрыЗапуска.Вставить("ДатаОкончания", КонецДня(Объект.ДатаОкончания));
ПараметрыЗапуска.Вставить("СуммаУслугХранения", Объект.СуммаУслугХранения+Объект.СумаУслугПлатнойПриемки+Объект.СуммаДоплаты);
ПараметрыЗапуска.Вставить("ЛичныйКабинет", Объект.ЛичныйКабинет);
ПараметрыЗапуска.Вставить("МП", Маркетплейс);
ПараметрыЗапуска.Вставить("ИДОтчета", ИДОтчета);
СтруктураФоновогоЗадания = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ЗапроситьДанныеОтчетаРеализации(ПараметрыЗапуска, УникальныйИдентификатор);
ИДЗадания = СтруктураФоновогоЗадания.ИдентификаторЗадания;
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ПараметрыОжидания.ВыводитьПрогрессВыполнения = Истина;
ПараметрыОжидания.Интервал = 2;
ДлительныеОперацииКлиент.ОжидатьЗавершение(СтруктураФоновогоЗадания, Новый ОписаниеОповещения("ПослеВыполненияЗапросаОтчета", ЭтотОбъект), ПараметрыОжидания);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыполненияЗапросаОтчета(Результат,ДополнительныеПараметры)Экспорт
Если ТипЗнч(Результат) = Тип("Структура") Тогда
Если Результат.Статус = "Выполнено" Тогда //получили результат
РезультатВыполнения = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
Если РезультатВыполнения.Ошибка Тогда
ПоказатьОповещениеПользователя(,,РезультатВыполнения.Сообщение,
БиблиотекаКартинок.Ошибка32,
СтатусОповещенияПользователя.Информация);
Иначе
// получить сам файл по ссылке
Элементы.СсылкаНаСтрОтчета.Заголовок = РезультатВыполнения.СсылкаНаОтчет;
УстановитьВидимостьДоступность();
Если РезультатВыполнения.СсылкаНаОтчет <> "" И РезультатВыполнения.СсылкаНаОтчет <> Неопределено ТОгда // письмерова 27.06.2024 BSLR-3615
ЗагрузитьФайлИзИнтернета(РезультатВыполнения.СсылкаНаОтчет);
Иначе // ссылки на файл нет
ПоказатьОповещениеПользователя(,,"Ссылка на отчет не получена, попробуйте еще раз запросить отчет по ID.",
БиблиотекаКартинок.Ошибка32,
СтатусОповещенияПользователя.Информация);
КонецЕсли;
КонецЕсли;
УдалитьИзВременногоХранилища(Результат.АдресРезультата);
ИначеЕсли Результат.Статус = "Ошибка" Тогда //не получили результат
ПоказатьОповещениеПользователя(,,Результат.КраткоеПредставлениеОшибки,
БиблиотекаКартинок.Ошибка32,
СтатусОповещенияПользователя.Информация);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗапроситьОтчетПоИД(Команда)
ПослеЗапросаГенерацииОтчета(Неопределено);
КонецПроцедуры
&НаКлиенте
Процедура СкачатьОтчетПоСсылке(Команда)
//отладка
//АдресФайлаВИнтернете = "https://market-mbi-prod.s3-private.mds.yandex.net/statistics-reports/954830/2023-08/statistics-report-2023-08.xlsx?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20230912T114033Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Credential=dSfBeaHjSm6fhdzUohgK%2F20230912%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=1e6e85ffc7cf4035fe9499ea813f66e390106365226eac43145cd92e0a75ff39";
Если Элементы.СсылкаНаСтрОтчета.Заголовок <> "" ТОгда
АдресФайлаВИнтернете = Элементы.СсылкаНаСтрОтчета.Заголовок;
ЗагрузитьФайлИзИнтернета(АдресФайлаВИнтернете);
Иначе
ПоказатьОповещениеПользователя(,,"Ссылка на отчет не получена, попробуйте еще раз запросить отчет по ID.",
БиблиотекаКартинок.Ошибка32,
СтатусОповещенияПользователя.Информация);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьФайлИзИнтернета(АдресФайлаВИнтернете)
АдресФайлаНаКлиенте = ПолучитьИмяВременногоФайла("xlsx");
Если Найти(НРег(АдресФайлаВИнтернете),"https://") = 1 Тогда
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;
Иначе
ЗащищенноеСоединение = Неопределено;
КонецЕсли;
// "http://static.1c.ru/images/logo.png" -> "static.1c.ru/images/logo.png"
АдресБезHTTP = СтрЗаменить(АдресФайлаВИнтернете, "//", Символы.ПС);
АдресБезHTTP = СтрПолучитьСтроку(АдресБезHTTP, СтрЧислоСтрок(АдресБезHTTP));
// "static.1c.ru/images/logo.png" -> "static.1c.ru"
АдресСервера = СтрПолучитьСтроку(СтрЗаменить(АдресБезHTTP, "/", Символы.ПС), 1);
// "static.1c.ru/images/logo.png" -> "/images/logo.png"
ПутьКФайлуВнутриДомена = Сред(АдресБезHTTP, Найти(АдресБезHTTP, "/"));
// скачиваем на диск
Соединение = Новый HTTPСоединение(АдресСервера, ,,,, 3, ЗащищенноеСоединение);
Соединение.Получить(ПутьКФайлуВнутриДомена, АдресФайлаНаКлиенте);
Файл = Новый Файл(АдресФайлаНаКлиенте);
Результат = Новый Структура("Адрес, ПомещениеФайлаОтменено,СсылкаНаФайл","",Ложь,
Новый Структура("ИдентификаторФайла,Имя,Расширение,Файл","",Файл.Имя,Файл.Расширение,""));
// переход в загрузку из эксель типовую
Результат.Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(АдресФайлаНаКлиенте));
ВыполнитьЗагрузку(Результат,Ложь);
КонецПроцедуры
// только ЯМ конец
#КонецОбласти
#область ЗагрузкаИзЭксельOzon
&НаКлиенте
Процедура ЗагрузитьИзExcel(Команда)
// письмерова 18.06.2024 BSLR-3588
ЭтоЯМ = Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет");
ЭтоОзон = Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON");
ИспользуютсяЮЛ = ЭтоЯМ ИЛИ ЭтоОзон;
ИспользуютсяГруппыДоступаКонтрагентов = ВернутьКонстантуГруппыДоступовКонтрагентов();
Если ИспользуютсяЮЛ И ИспользуютсяГруппыДоступаКонтрагентов И НЕ ЗначениеЗаполнено(ГруппаДоступаПартнера) И СоздаватьКонтрагентов Тогда
сообщение = новый СообщениеПользователю;
сообщение.Текст = "Заполните поле Группа доступа партнера";
сообщение.Сообщить();
Возврат;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Период) Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю("Заполните период", , "Период");
Возврат;
КонецЕсли;
Если Объект.Товары.Количество() или Объект.Услуги.Количество() Тогда
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопросОбОчищенииТаблицы", ЭтаФорма);
ПоказатьВопрос(ОписаниеОповещения, "Таблицы не пустые. Очистить?", РежимДиалогаВопрос.ДаНетОтмена);
иначе
ВыполнитьЗагрузкуЧерезФайл();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеОтветаНаВопросОбОчищенииТаблицы(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Отмена Тогда
Возврат;
КонецЕсли;
Если Результат = КодВозвратаДиалога.Да Тогда
Объект.Товары.Очистить();
Объект.Услуги.Очистить();
КонецЕсли;
ВыполнитьЗагрузкуЧерезФайл();
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьЗагрузкуЧерезФайл(ЭтоВыкупы = Ложь)
Попытка
// Бойков BSLR-3406
ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов;
ПараметрыДиалога.МножественныйВыбор = Ложь;
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") Тогда
ПараметрыДиалога.Фильтр = "ZIP-архив|*.zip";
Иначе
ПараметрыДиалога.Фильтр = "Excel (*.xls;*.xlsx;*.ods)|*.xls;*.xlsx;*.ods";
КонецЕсли;
НачатьПомещениеФайлаНаСервер(Новый ОписаниеОповещения("ВыполнитьЗагрузку",ЭтаФорма,ЭтоВыкупы),,,, ПараметрыДиалога,новый УникальныйИдентификатор);
Исключение
ОбщегоНазначенияКлиент.СообщитьПользователю("Не получилось открыть файл. Скорее всего он уже открыт на вашем компьютере");
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьЗагрузку(Результат,ЭтоВыкупы) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
Сообщить("Начало загрузки: " + ТекущаяДата());// BSLR-5483 - удалить
РасширениеФайла = Результат.СсылкаНаФайл.Расширение;
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда
РезультатВыполнения = ЗагрузитьНаСервереOzon(Результат.Адрес, РасширениеФайла,ЭтоВыкупы);
ИначеЕсли Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
РезультатВыполнения = ЗагрузитьНаСервереWB(Результат.Адрес, РасширениеФайла, ЭтоВыкупы);
ИначеЕсли Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет") Тогда
РезультатВыполнения = ЗагрузитьНаСервереЯМ(Результат.Адрес, РасширениеФайла, ЭтоВыкупы);
ИначеЕсли Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") Тогда
РезультатВыполнения = ЗагрузитьНаСервереСберМегаМаркет(Результат.Адрес, РасширениеФайла, ЭтоВыкупы);
КонецЕсли;
Если НЕ РезультатВыполнения.Ошибка Тогда
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда
Сообщить("окончание загрузки: " + ТекущаяДата());// BSLR-5483 - удалить
ЗагрузитьДанныеAPI(Неопределено);
Иначе
ПослеЗагрузкиТоваровИзExcel(РезультатВыполнения, ЭтоВыкупы); //
КонецЕсли;
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") И НЕ ЭтоВыкупы Тогда
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопросОбОчищенииТаблицыВыкупов", ЭтаФорма);
ПоказатьВопрос(ОписаниеОповещения, "Таблица заказов загружена. Загрузить выкупы?", РежимДиалогаВопрос.ДаНет);
КонецЕсли;
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") И НЕ ЭтоВыкупы Тогда
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопросОЗагрузкеЛояльности", ЭтаФорма);
ПоказатьВопрос(ОписаниеОповещения, "Таблица заказов загружена. Загрузить данные о программе лояльности СберМегаМаркет?", РежимДиалогаВопрос.ДаНет);
КонецЕсли;
// письмерова 06.10.2025 BSLR-4895
Если НЕ ЭтоВыкупы Тогда
Если ЕстьПродажиЮЛ() Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю("Есть продажи юр.лицам за период, загрузите данные по продажам юр.лицам");
КонецЕсли;
КонецЕсли;
Иначе
Если ЗначениеЗаполнено(РезультатВыполнения.Сообщение) Тогда
Сообщить(РезультатВыполнения.Сообщение);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// письмерова 21.08.2023 BSLR-2035
&НаКлиенте
Процедура ЗагрузитьДанныеЮЛ(Команда)
ЭтоЯМ = Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет");
ЭтоОзон = Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON");
// BSLR-4895 ++
ЭтоВБ = Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries");
ИспользуютсяЮЛ = ЭтоЯМ ИЛИ ЭтоОзон ИЛИ ЭтоВБ; // BSLR-4895 --
ИспользуютсяГруппыДоступаКонтрагентов = ВернутьКонстантуГруппыДоступовКонтрагентов();
Если ИспользуютсяЮЛ И ИспользуютсяГруппыДоступаКонтрагентов И НЕ ЗначениеЗаполнено(ГруппаДоступаПартнера) И СоздаватьКонтрагентов Тогда
сообщение = новый СообщениеПользователю;
сообщение.Текст = "Заполните поле Группа доступа партнера";
сообщение.Сообщить();
Возврат;
КонецЕсли;
Если Объект.Товары.Количество() Тогда
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопросОЗагрузкеДанныхЮЛ", ЭтаФорма);
ПоказатьВопрос(ОписаниеОповещения, "Загрузить данные о юридических лицах?", РежимДиалогаВопрос.ДаНет);
иначе
Сообщить("Перед загрузкой данных по юридическим лицам нужно загрузить данные о продажах.");
КонецЕсли;
КонецПроцедуры
// письмерова 09.11.2023 BSLR-2599
&НаКлиенте
Процедура ПослеОтветаНаВопросОЗагрузкеДанныхЮЛ(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Нет Тогда
Возврат;
КонецЕсли;
Если ЕстьПродажиЮЛ() ТОгда
// BSLR-4895 ++
Если Маркетплейс <> ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
Попытка
НачатьПомещениеФайлаНаСервер(Новый ОписаниеОповещения("ВыполнитьЗагрузкуДанныхЮЛ",ЭтаФорма, Истина),,,,,новый УникальныйИдентификатор);
Исключение
ОбщегоНазначенияКлиент.СообщитьПользователю("Не получилось открыть файл. Скорее всего он уже открыт на вашем компьютере");
КонецПопытки;
Иначе
Попытка
НачатьПомещениеФайловНаСервер(Новый ОписаниеОповещения("ВыполнитьЗагрузкуРеестраЮЛ",ЭтаФорма));
Исключение
ОбщегоНазначенияКлиент.СообщитьПользователю("Не получилось открыть файл. Скорее всего он уже открыт на вашем компьютере");
КонецПопытки;
КонецЕсли; // BSLR-4895 --
Иначе
Сообщить("Перед загрузкой данных по юридическим лицам нужно загрузить данные о продажах. Данные о продажах юр. лицам не обнаружены. Попробуйте повторно загрузить данные о продажах.");
КонецЕсли;
КонецПроцедуры
// письмерова 09.11.2023 BSLR-2599
&НаКлиенте
Процедура ВыполнитьЗагрузкуДанныхЮЛ(Результат,ЭтоВыкупы) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
РасширениеФайла = Результат.СсылкаНаФайл.Расширение;
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда
РезультатВыполнения = ЗагрузитьНаСервереOzon(Результат.Адрес, РасширениеФайла,ЭтоВыкупы);
КонецЕсли;
Если НЕ РезультатВыполнения.Ошибка Тогда
ПослеЗагрузкиТоваровИзExcel(РезультатВыполнения, ЭтоВыкупы);
Иначе
Сообщить(РезультатВыполнения.Сообщение);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗагрузкиТоваровИзExcel(РезультатВыполнения, ЭтоВыкупы = Ложь)
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") И ЭтоВыкупы Тогда
// не нужна доп обработка после загрузки лояльности
ИначеЕсли Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") И ЭтоВыкупы Тогда
// письмерова 21.08.2023 BSLR-2035
// доп обработка после загрузки данных ЮЛ не нужна
Иначе
Если ТипЗнч(РезультатВыполнения) = Тип("Структура") Тогда
Если НЕ РезультатВыполнения.Ошибка тогда //проверим на ошибку в результате
Если ЭтоВыкупы Тогда
ОбновитьДанныеФормыНаКлиенте_Выкуп(РезультатВыполнения, , Истина);
Если ЗначениеЗаполнено(РезультатВыполнения.Сообщение) Тогда
ПоказатьОповещениеПользователя(,,РезультатВыполнения.Сообщение,
БиблиотекаКартинок.Предупреждение32,
СтатусОповещенияПользователя.Информация);
КонецЕсли;
Иначе
ОбновитьДанныеФормыНаКлиенте(РезультатВыполнения, , Истина);
Если ЗначениеЗаполнено(РезультатВыполнения.Сообщение) Тогда
ПоказатьОповещениеПользователя(,,РезультатВыполнения.Сообщение,
БиблиотекаКартинок.Предупреждение32,
СтатусОповещенияПользователя.Информация);
КонецЕсли;
КонецЕсли;
Иначе // в результате ошибка
ПоказатьОповещениеПользователя(,,РезультатВыполнения.Сообщение,
БиблиотекаКартинок.Информация,
СтатусОповещенияПользователя.Информация);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСерверебезконтекста
Функция СоответствиеКолонокФайлаЗагрузки(MXL, СтрокаЗаголовков)
Результат = Новый Структура;
Результат.Вставить("Артикул", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Код товара продавца"));
// ++ Стародубцев BSLR-5321, BSLR-5431
Результат.Вставить("sku", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Код товара OZON"));
Если Результат.sku = 0 Тогда
Результат.Вставить("sku", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "SKU"));
КонецЕсли;
// -- Стародубцев BSLR-5321, BSLR-5431
Результат.Вставить("ЦенаПродажи", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Цена реализации"));
Результат.Вставить("СуммаДоплатыOzon", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Доплата за счет Ozon"));
Если Результат.СуммаДоплатыOzon = 0 Тогда
Результат.Вставить("СуммаДоплатыOzon", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Баллы за скидки")); // письмерова 07.11.2023 BSLR-2800
КонецЕсли;
Результат.Вставить("КомиссияПродажи", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Итого комиссия с учетом скидок и наценки"));
Если Результат.КомиссияПродажи = 0 Тогда
Результат.Вставить("КомиссияПродажи", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Базовая комиссия, руб.")); // письмерова 07.11.2023 BSLR-2800
КонецЕсли;
Если Результат.КомиссияПродажи = 0 Тогда
Результат.Вставить("КомиссияПродажи", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Базовое вознаграждение Ozon, руб.")); // письмерова 07.02.2024 BSLR-3204
КонецЕсли;
Результат.Вставить("КоличествоПродано", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Кол-во"));
// ++ Бойков BSLR-847
//Результат.Вставить("СуммаДоплатыOzonВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Доплата за счет Ozon") + 9);
//Результат.Вставить("КоличествоВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Кол-во") + 9);
//Результат.Вставить("КомиссияВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Итого комиссия с учетом скидок и наценки") + 11);
//Результат.Вставить("ЦенаВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Цена реализации") + 8);
Результат.Вставить("СуммаДоплатыOzonВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Доплата за счет Ozon", Результат.СуммаДоплатыOzon));
Если Результат.СуммаДоплатыOzonВозврат = 0 Тогда
Результат.Вставить("СуммаДоплатыOzonВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Баллы за скидки", Результат.СуммаДоплатыOzon)); // письмерова 07.11.2023 BSLR-2800
КонецЕсли;
Результат.Вставить("КоличествоВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Кол-во", Результат.КоличествоПродано));
Результат.Вставить("КомиссияВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Итого комиссия с учетом скидок и наценки", Результат.КомиссияПродажи));
Если Результат.КомиссияВозврат = 0 Тогда
Результат.Вставить("КомиссияВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Базовая комиссия, руб.", Результат.КомиссияПродажи));// письмерова 07.11.2023 BSLR-2800
КонецЕсли;
Если Результат.КомиссияВозврат = 0 Тогда
Результат.Вставить("КомиссияВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Базовое вознаграждение Ozon, руб.", Результат.КомиссияПродажи)); // письмерова 07.02.2024 BSLR-3204
КонецЕсли;
Результат.Вставить("ЦенаВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Цена реализации", Результат.ЦенаПродажи));
// -- Бойков BSLR-847
Результат.Вставить("Идентификатор", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Код товара OZON"));
Результат.Вставить("ШтрихКод", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Штрих-код товара"));
Результат.Вставить("ИД_Заказ", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Номер"));
// ++ Бойков BSLR-847
Результат.Вставить("УИН", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "UIN")); // Скорректировать имя поиска колонки
// письмерова 18.08.2023 BSLR-2035
НомерСчФакт = УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "счет-фактуры");
Если НомерСчФакт = 0 Тогда
НомерСчФакт = УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "счета-фактуры");
КонецЕсли;
Результат.Вставить("НомерСчФакт", НомерСчФакт);
Результат.Вставить("ДатаСчФакт", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Дата"));
Результат.Вставить("ИНН", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "ИНН"));
Результат.Вставить("НаименованиеПокупателя", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Наименование покупателя"));
Результат.Вставить("КПП", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "КПП"));
Результат.Вставить("ЮридическийАдресПокупателя", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Юридический адрес покупателя"));
// письмерова 20.08.2024 BSLR-3677
Результат.Вставить("ВыплатыЛояльности", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Выплаты по механикам лояльности"));
Результат.Вставить("ВыплатыЛояльностиВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Выплаты по механикам лояльности", Результат.КоличествоПродано));
// письмерова 03.06.2025 BSLR-4648
Если Результат.Артикул = 0 Тогда
Результат.Артикул = УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Артикул");
КонецЕсли;
Если Результат.Идентификатор = 0 Тогда
Результат.Идентификатор = УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "SKU");
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСерверебезконтекста
Функция УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, СтрокаПоиска, НачальноеСмещение = 0)
// Бойков BSLR-847. Увеличен диапазон колонок, UIN не попадал в прежний.
// Добавлено начальное смещение для считывания колонок с одинаковым заголовком,
// т.к. в разных версиях файлов положение колонок отличается
НачальныйИндекс = 1 + НачальноеСмещение;
Для сч = НачальныйИндекс по 50 Цикл
Если СтрокаПоиска = "ИНН" Тогда // 01.12.2025 письмерова BSLR-5123
Если ВРЕГ(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(СтрокаЗаголовков) + "C" + сч).ТекущаяОбласть.Текст)) = ВРЕГ(СтрокаПоиска)
Или ВРЕГ(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(СтрокаЗаголовков+1) + "C" + сч).ТекущаяОбласть.Текст)) = ВРЕГ(СтрокаПоиска) Тогда
Возврат сч;
Прервать;
КонецЕсли;
Иначе
Если СтрНайти(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(СтрокаЗаголовков) + "C" + сч).ТекущаяОбласть.Текст), СтрокаПоиска) <> 0
Или СтрНайти(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(СтрокаЗаголовков+1) + "C" + сч).ТекущаяОбласть.Текст), СтрокаПоиска) <> 0 Тогда
Возврат сч;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат 0;
КонецФункции
&НаСерверебезконтекста
Функция ПолучитьТаблицуЗагрузкиТоваровOZON() Экспорт
// письмерова 16.04.2026 BSLR-5483 - добавлена типизация колонок таблицы
КвалификаторыСтроки = Новый КвалификаторыСтроки(100);
КвалификаторыЧисла = Новый КвалификаторыЧисла(18,3);
КвалификаторыДаты = Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя);
ТипСтроки = Новый ОписаниеТипов("Строка" ,,,, КвалификаторыСтроки);
ТипЧисла = Новый ОписаниеТипов("Число" ,,, КвалификаторыЧисла );
ТипДаты = Новый ОписаниеТипов("Дата" ,,,,,КвалификаторыДаты);
СписокТоваров = Новый ТаблицаЗначений;
СписокТоваров.Колонки.Добавить("ТипОперации", ТипСтроки);
СписокТоваров.Колонки.Добавить("Наименование", ТипСтроки);
СписокТоваров.Колонки.Добавить("Идентификатор", ТипСтроки);
СписокТоваров.Колонки.Добавить("Артикул",ТипСтроки);
СписокТоваров.Колонки.Добавить("ШтрихКод",ТипСтроки);
СписокТоваров.Колонки.Добавить("Количество",ТипЧисла);
СписокТоваров.Колонки.Добавить("Цена",ТипЧисла);
СписокТоваров.Колонки.Добавить("Сумма",ТипЧисла);
СписокТоваров.Колонки.Добавить("СуммаДоплатыOzon",ТипЧисла);
СписокТоваров.Колонки.Добавить("Комиссия",ТипЧисла);
//СписокТоваров.Колонки.Добавить("НДС");
СписокТоваров.Колонки.Добавить("ИД_Заказ",ТипСтроки);
//++ Стародубцев BSLR-5321
СписокТоваров.Колонки.Добавить("sku",ТипСтроки);
//-- Стародубцев BSLR-5321
СписокТоваров.Колонки.Добавить("УИН",ТипСтроки);
СписокТоваров.Колонки.Добавить("НомерСчФакт",ТипСтроки);// письмерова 18.08.2023 BSLR-2035
СписокТоваров.Колонки.Добавить("КомиссияБазовая",ТипЧисла); // письмерова 28.11.2023 BSLR-2862
СписокТоваров.Колонки.Добавить("ВыплатыЛояльности",ТипЧисла); // письмерова 20.08.2024 BSLR-3677
СписокТоваров.Колонки.Добавить("ПродажаЮЛ", Новый ОписаниеТипов("Булево")); // BSLR-5361
Возврат СписокТоваров;
КонецФункции
// письмерова 21.08.2023 BSLR-2035
&НаСерверебезконтекста
Функция ПолучитьТаблицуДанныхЮЛOZON() Экспорт
СписокТоваров = Новый ТаблицаЗначений;
СписокТоваров.Колонки.Добавить("НаименованиеПокупателя",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(250)));
СписокТоваров.Колонки.Добавить("ЮридическийАдресПокупателя",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(250)));
СписокТоваров.Колонки.Добавить("ИНН",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(15)));
СписокТоваров.Колонки.Добавить("КПП",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(15)));
СписокТоваров.Колонки.Добавить("НомерСчФакт",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(25)));
СписокТоваров.Колонки.Добавить("ДатаСчФакт",Новый ОписаниеТипов("Дата" ,,,, Новый КвалификаторыДаты(ЧастиДаты.Дата)));
СписокТоваров.Колонки.Добавить("SRID",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(250))); // BSLR-4698
Возврат СписокТоваров;
КонецФункции
&НаСервере
Процедура ЗаполнитьСтрокуТаблицыДанныхЮЛ(СтрокаПриемник, ТабличныйДокумент, ТекущаяСтрока, НомераКолонокФайла, ЭтоВозврат = Ложь)
XMLТекущаяСтрока = XMLСтрока(ТекущаяСтрока);
СтрокаПриемник.НаименованиеПокупателя = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НаименованиеПокупателя).ТекущаяОбласть.Текст);
СтрокаПриемник.ИНН = СокрЛП(Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ИНН).ТекущаяОбласть.Текст));
СтрокаПриемник.НомерСчФакт = СокрЛП(Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НомерСчФакт).ТекущаяОбласть.Текст));
ДатаСчФактСтрокой = СокрЛП(Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ДатаСчФакт).ТекущаяОбласть.Текст));
СтрокаПриемник.ДатаСчФакт = ?(ДатаСчФактСтрокой = "", "", Дата("" + ДатаСчФактСтрокой + " 0:00:00"));
СтрокаПриемник.КПП = СокрЛП(Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.КПП).ТекущаяОбласть.Текст));
СтрокаПриемник.ЮридическийАдресПокупателя = СокрЛП(Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ЮридическийАдресПокупателя).ТекущаяОбласть.Текст));
// письмерова 17.12.2025 BSLR-5170
// некорректный адрес, заменяем на пустую строку лишние буквы в номре помещения "помещ./часть помещ."
СтрокаПриемник.ЮридическийАдресПокупателя = СтрЗаменить(СтрокаПриемник.ЮридическийАдресПокупателя,"помещ./часть помещ.","");
КонецПроцедуры
&НаСервере
Функция ЕстьПродажиЮЛ()
Результат = Ложь;
Для Каждого Стр из Объект.Товары Цикл
Если Стр.НомерСчФакт <> "" Тогда // есть сч/факт, есть продажи ЮЛ
Результат = Истина;
Прервать;
КонецЕсли;
// письмерова 02.09.2025 BSLR-4698
Если Стр.ПродажаЮЛ ТОгда // для ВБ
Результат = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
&НаСервере
Процедура ЗаполнитьСтрокуТаблицыТоваров(СтрокаПриемник, ТабличныйДокумент, ТекущаяСтрока, НомераКолонокФайла, ЭтоВозврат = Ложь)
XMLТекущаяСтрока = XMLСтрока(ТекущаяСтрока);
СтрокаПриемник.Артикул = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Артикул).ТекущаяОбласть.Текст);
// ++ Стародубцев BSLR-5321
Попытка
СтрокаПриемник.SKU = Строка(Число(Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.SKU).ТекущаяОбласть.Текст)));
Исключение
СтрокаПриемник.SKU = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.SKU).ТекущаяОбласть.Текст);
КонецПопытки;
// -- Стародубцев BSLR-5321
СтрокаПриемник.Идентификатор = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Идентификатор).ТекущаяОбласть.Текст);
СтрокаПриемник.ШтрихКод = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Штрихкод).ТекущаяОбласть.Текст);
Если ЭтоВозврат Тогда
СтрокаПриемник.Комиссия = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.КомиссияВозврат).ТекущаяОбласть.Текст);
СтрокаПриемник.Комиссия = СтрокаПриемник.Комиссия * -1;
СтрокаПриемник.Цена = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ЦенаВозврат).ТекущаяОбласть.Текст);
СтрокаПриемник.СуммаДоплатыOzon = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СуммаДоплатыOzonВозврат).ТекущаяОбласть.Текст);
СтрокаПриемник.СуммаДоплатыOzon = СтрокаПриемник.СуммаДоплатыOzon * -1;
// письмерова 20.08.2024 BSLR-3677
Попытка
СтрокаПриемник.ВыплатыЛояльности = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ВыплатыЛояльностиВозврат).ТекущаяОбласть.Текст);
Исключение
СтрокаПриемник.ВыплатыЛояльности = 0; КонецПопытки;
СтрокаПриемник.ВыплатыЛояльности = СтрокаПриемник.ВыплатыЛояльности * -1;
Иначе
СтрокаПриемник.Комиссия = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.КомиссияПродажи).ТекущаяОбласть.Текст);
СтрокаПриемник.Комиссия = СтрокаПриемник.Комиссия * 1; //BSLR-2862
СтрокаПриемник.Цена = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ЦенаПродажи).ТекущаяОбласть.Текст);
СтрокаПриемник.СуммаДоплатыOzon = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СуммаДоплатыOzon).ТекущаяОбласть.Текст);
СтрокаПриемник.СуммаДоплатыOzon = СтрокаПриемник.СуммаДоплатыOzon * 1;//BSLR-2862
// письмерова 20.08.2024 BSLR-3677
Попытка
СтрокаПриемник.ВыплатыЛояльности = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ВыплатыЛояльности).ТекущаяОбласть.Текст);
Исключение
СтрокаПриемник.ВыплатыЛояльности = 0; КонецПопытки;
СтрокаПриемник.ВыплатыЛояльности = СтрокаПриемник.ВыплатыЛояльности * 1;
КонецЕсли;
СтрокаПриемник.Сумма = СтрокаПриемник.Количество * СтрокаПриемник.Цена;
// ++ Бойков BSLR-2182
СтрокаПриемник.ИД_Заказ = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ИД_Заказ).ТекущаяОбласть.Текст);
// -- Бойков BSLR-2182
// ++ Бойков BSLR-847
Если ЗначениеЗаполнено(НомераКолонокФайла.УИН) Тогда
СтрокаПриемник.УИН = СокрЛП(Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.УИН).ТекущаяОбласть.Текст));
Иначе
СтрокаПриемник.УИН = "";
КонецЕсли;
// письмерова 18.08.2023 BSLR-2035
Если ЗначениеЗаполнено(НомераКолонокФайла.НомерСчФакт) Тогда
СтрокаПриемник.НомерСчФакт = СокрЛП(Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НомерСчФакт).ТекущаяОбласть.Текст));
Иначе
СтрокаПриемник.НомерСчФакт = "";
КонецЕсли;
// письмерова 08.04.04.2026 BSLR-5479
Если ЗначениеЗаполнено(СтрокаПриемник.НомерСчФакт) ТОгда
СтрокаПриемник.ПродажаЮЛ = Истина;
КонецЕсли;
СтрокаПриемник.КомиссияБазовая = СтрокаПриемник.Комиссия; // BSLR-5483
КонецПроцедуры
&НаСервере
Функция ЗагрузитьНаСервереOzon(Знач Адрес, Расширение, РасшифровкаЮЛ = Ложь)
Результат = Новый Структура("Ошибка, Сообщение, СписокТоваров, СписокУслуг",
Ложь, "", Новый Массив, Новый Массив);
ПерваяСтрока = 0;
ЕстьДанныеОтправления = Ложь;
ТаблицаТоваров = ПолучитьТаблицуЗагрузкиТоваровOZON();
ТаблицаДанныхЮЛ = ПолучитьТаблицуДанныхЮЛOZON();
ФайлВременногоХранилища = ПолучитьИзВременногоХранилища(Адрес);
ИмяФайла = ПолучитьИмяВременногоФайла(Расширение);
Попытка
ФайлВременногоХранилища.Записать(ИмяФайла);
Исключение
Результат.Ошибка = Истина;
Результат.Сообщение = "Ошибка при загрузке файла, повторите попытку";
Возврат Результат;
КонецПопытки;
УдалитьИзВременногоХранилища(Адрес);
MXL = Новый ТабличныйДокумент;
MXL.Прочитать(ИмяФайла);
Файл = Новый Файл(ИмяФайла);
Если Файл.Существует() Тогда
УдалитьФайлы(ИмяФайла);
КонецЕсли;
КоличествоСтрок = MXL.ВысотаТаблицы;
КоличествоКолонок = MXL.ШиринаСтраницы;
Для ТекущаяСтрока = 1 По КоличествоСтрок Цикл
Для ТекущаяКолонка = 1 По КоличествоКолонок Цикл
ТекстЯчейки = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + ТекущаяКолонка).ТекущаяОбласть.Текст);
Если Не РасшифровкаЮЛ ТОгда
Если СтрНайти(ТекстЯчейки, "Отчет реализации") <> 0 Тогда
ПозицияНомераНачало = СтрНайти(ТекстЯчейки, "№");
ПозицияНомераОт = СтрНайти(ТекстЯчейки, "от");
НомерОправления = СокрЛП(Сред(ТекстЯчейки, ПозицияНомераНачало + 2, ПозицияНомераОт - ПозицияНомераНачало - 3));
Объект.НомерВходящегоДокумента = НомерОправления;
КонецЕсли;
Если СтрНайти(ТекстЯчейки, "Отчет о реализации") <> 0 Тогда
ПозицияНомераНачало = СтрНайти(ТекстЯчейки, "№");
ПозицияНомераОт = СтрНайти(ТекстЯчейки, "от");
НомерОправления = СокрЛП(Сред(ТекстЯчейки, ПозицияНомераНачало + 2, ПозицияНомераОт - ПозицияНомераНачало - 3));
Объект.НомерВходящегоДокумента = НомерОправления;
КонецЕсли;
Если СтрНайти(ТекстЯчейки, "Реализация товаров за период") <> 0 Тогда
ПозицияДаты = СтрНайти(ТекстЯчейки, "по");
ДатаОтправленияСтрока = СокрЛП(Сред(ТекстЯчейки, ПозицияДаты + 3)) + " 00:00:00";
Попытка
ДатаОтправления = Дата(ДатаОтправленияСтрока);
Объект.ДатаВходящегоДокумента = ДатаОтправления;
Исключение
ОбщегоНазначения.СообщитьПользователю("Не удалось определить дату входящего документа из файла. Укажите дату вручную");
КонецПопытки;
КонецЕсли;
Если ТекстЯчейки = "№ п/п" Тогда
ПерваяСтрока = ТекущаяСтрока + 3;
КонецЕсли;
Если ТекстЯчейки = "Номер" Тогда
ЕстьДанныеОтправления = Истина;
КонецЕсли;
Если ЕстьДанныеОтправления И ЗначениеЗаполнено(ПерваяСтрока) Тогда
Прервать;
КонецЕсли;
Иначе
Если ТекстЯчейки = "Статус УКД/УПД" Тогда
ПерваяСтрока = ТекущаяСтрока + 1;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Если ПерваяСтрока = 0 Тогда
Результат.Ошибка = Истина;
Если Не РасшифровкаЮЛ ТОгда
ОбщегоНазначения.СообщитьПользователю("Выбран не тот документ, скачайте из ЛК на маркетплейсе документ ""Позаказный отчет по реализациям""");
Иначе
ОбщегоНазначения.СообщитьПользователю("Выбран не тот документ, скачайте из ЛК на маркетплейсе документ ""Реестр продаж юридическим лицам""");
КонецЕсли;
Возврат Результат;
КонецЕсли;
Если Не РасшифровкаЮЛ ТОгда
Если НЕ ЕстьДанныеОтправления Тогда
Результат.Ошибка = Истина;
ОбщегоНазначения.СообщитьПользователю("Для загрузки необходимо выбрать отчет по реализации в разрезе заказов");
Возврат Результат;
КонецЕсли;
КонецЕсли;
Если Не РасшифровкаЮЛ ТОгда
НомераКолонокФайла = СоответствиеКолонокФайлаЗагрузки(MXL, ПерваяСтрока-3);
Иначе
НомераКолонокФайла = СоответствиеКолонокФайлаЗагрузки(MXL, ПерваяСтрока-1);
КонецЕсли;
Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок Цикл
Если Не РасшифровкаЮЛ ТОгда
Артикул = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.Артикул).ТекущаяОбласть.Текст);
// ++ Стародубцев BSLR-5321
SKU = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.SKU).ТекущаяОбласть.Текст);
// -- Стародубцев BSLR-5321
ШтрихКод = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.ШтрихКод).ТекущаяОбласть.Текст);
Если (Артикул = "" и ШтрихКод = "") Или (Артикул = 0 и ШтрихКод = 0) Или (Артикул = "0" и ШтрихКод = "0") Тогда
Продолжить;
КонецЕсли;
КоличествоПродано = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.КоличествоПродано).ТекущаяОбласть.Текст);
КоличествоВозврат = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.КоличествоВозврат).ТекущаяОбласть.Текст);
Если ЗначениеЗаполнено(КоличествоПродано) Тогда
НоваяСтрока = ТаблицаТоваров.Добавить();
НоваяСтрока.ТипОперации = "Продажа";
НоваяСтрока.Количество = КоличествоПродано;
ЗаполнитьСтрокуТаблицыТоваров(НоваяСтрока, MXL, ТекущаяСтрока, НомераКолонокФайла);
Если НЕ Объект.ЛичныйКабинет.ЗагружатьВыплатыПоМеханикамЛояльностиВУслугу ТОгда // пересчет цены/суммы - лояльность добавляем к сумме
НоваяСтрока.Сумма = НоваяСтрока.Сумма + НоваяСтрока.ВыплатыЛояльности;
НоваяСтрока.Цена = НоваяСтрока.Сумма/?(НоваяСтрока.Количество = 0, 1, НоваяСтрока.Количество);
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(КоличествоВозврат) Тогда
НоваяСтрока = ТаблицаТоваров.Добавить();
НоваяСтрока.ТипОперации = "Возврат";
НоваяСтрока.Количество = КоличествоВозврат;
НоваяСтрока.Количество = - НоваяСтрока.Количество;
ЗаполнитьСтрокуТаблицыТоваров(НоваяСтрока, MXL, ТекущаяСтрока, НомераКолонокФайла, Истина);
Если НЕ Объект.ЛичныйКабинет.ЗагружатьВыплатыПоМеханикамЛояльностиВУслугу ТОгда // пересчет цены/суммы - лояльность добавляем к сумме
НоваяСтрока.Сумма = НоваяСтрока.Сумма + НоваяСтрока.ВыплатыЛояльности;
НоваяСтрока.Цена = НоваяСтрока.Сумма/?(НоваяСтрока.Количество = 0, 1, НоваяСтрока.Количество);
КонецЕсли;
КонецЕсли;
Иначе
НоваяСтрока = ТаблицаДанныхЮЛ.Добавить();
ЗаполнитьСтрокуТаблицыДанныхЮЛ(НоваяСтрока, MXL, ТекущаяСтрока, НомераКолонокФайла);
КонецЕсли;
КонецЦикла;
Если ТаблицаТоваров.Количество() Тогда
Если Не РасшифровкаЮЛ ТОгда
ДоплатаЗаСчетОзон = ТаблицаТоваров.Итог("СуммаДоплатыOzon");
КомиссияБазовая = ТаблицаТоваров.Итог("Комиссия");
ОтниматьДоплату = ?(ДоплатаЗаСчетОзон>0.99*КомиссияБазовая,Ложь,Истина);
ИспользуетсяВерсияФайлаСУИН = ЗначениеЗаполнено(НомераКолонокФайла.УИН);
ДанныеЗагрузки = топ_РаботаСМаркетплейсами_OZON.ПолучитьДанныеИзВыгрузки(ТаблицаТоваров, Маркетплейс, Объект.ЛичныйКабинет,Ложь,Объект.ДатаОкончания,,ОтниматьДоплату,ИспользуетсяВерсияФайлаСУИН);
Если ДанныеЗагрузки.Ошибка Тогда
Результат.Ошибка = Истина;
Результат.Сообщение = Результат.Сообщение;
Возврат Результат;
КонецЕсли;
Объект.Товары.Очистить();
Объект.Товары.Загрузить(ДанныеЗагрузки.Товары);
КонецЕсли;
КонецЕсли;
Если ТаблицаДанныхЮЛ.Количество() Тогда
// обработка таб части, заполнение данных по ЮЛ, поиск контрагента по ИНН
// если не нашли - ипшем ИНН + Наименование и сообщаем пользователю
Результат = ДополнитьДаннымиЮЛOZON(ТаблицаДанныхЮЛ);
Если Результат.Ошибка Тогда
Результат.Ошибка = Истина;
Результат.Сообщение = Результат.Сообщение;
Возврат Результат;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
// письмерова 01.12.2023 BSLR-2862 - удалить BSLR-5483
//&НаСервере
//Функция ПересчитатьТаблицуТоваровОЗОН(ТаблицаТоваров)
//
// ДоплатаЗаСчетОзон = ТаблицаТоваров.Итог("СуммаДоплатыOzon");
// КомиссияБазовая = ТаблицаТоваров.Итог("Комиссия");
//
// ОтниматьДоплату = ?(ДоплатаЗаСчетОзон>0.99*КомиссияБазовая,Ложь,Истина);
//
// Для Каждого Стр Из ТаблицаТоваров Цикл
// Стр.КомиссияБазовая = Стр.Комиссия;
// Если ОтниматьДоплату Тогда
// Стр.Комиссия = Стр.КомиссияБазовая - Стр.СуммаДоплатыOzon;
// Иначе
// Стр.Комиссия = Окр(Стр.КомиссияБазовая * 0.01,2); // BSLR-4243
// КонецЕсли;
// КонецЦикла;
//
// Возврат ТаблицаТоваров;
//КонецФункции
// письмерова 21.08.2023 BSLR-2035
&НаСервере
Функция ДополнитьДаннымиЮЛOZON(ТаблицаДанныхЮЛ)
// если нужно создавать контрагентов, то предварительно проверим кто уже есть в базе и создадим тех, кого не нашли по ИНН
Если СоздаватьКонтрагентов Тогда
ВремТабл = ТаблицаДанныхЮЛ.Скопировать();
ВремТабл.Свернуть("НаименованиеПокупателя,ИНН,КПП,ЮридическийАдресПокупателя");
Запрос = Новый Запрос("ВЫБРАТЬ
| ТЗ.НаименованиеПокупателя КАК НаименованиеПокупателя,
| ТЗ.ИНН КАК ИНН,
| ТЗ.КПП КАК КПП,
| ТЗ.ЮридическийАдресПокупателя КАК ЮридическийАдресПокупателя
|ПОМЕСТИТЬ Таблица
|ИЗ
| &ТЗ КАК ТЗ
|ГДЕ
| ТЗ.ИНН <> """"
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Таблица.НаименованиеПокупателя КАК НаименованиеПокупателя,
| Таблица.ИНН КАК ИНН,
| Таблица.КПП КАК КПП,
| Таблица.ЮридическийАдресПокупателя КАК ЮридическийАдресПокупателя,
| ВЫБОР
| КОГДА Контрагенты.Ссылка ЕСТЬ NULL
| ТОГДА ""ИНН "" + (ВЫРАЗИТЬ(Таблица.ИНН КАК СТРОКА(15))) + "" "" + (ВЫРАЗИТЬ(Таблица.НаименованиеПокупателя КАК СТРОКА(200)))
| ИНАЧЕ Контрагенты.Ссылка
| КОНЕЦ КАК Покупатель
|ИЗ
| Таблица КАК Таблица
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
| ПО Таблица.ИНН = Контрагенты.ИНН ");
Запрос.УстановитьПараметр("ТЗ",ВремТабл);
ТаблицаНеНайденныхЮЛ = Запрос.Выполнить().Выгрузить(); // отладка
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Если ТипЗнч(Выборка.Покупатель) = Тип("Строка") Тогда
НовыйКонтрагент = СоздатьЮЛ(Выборка,Объект.ЛичныйКабинет.Организация);
Сообщить("Создан новый контрагент " + НовыйКонтрагент);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Результат = Новый Структура("Ошибка, Сообщение",Ложь,"");
// BSLR-4698
ТаблицаДанныхЮЛ.Свернуть("НаименованиеПокупателя,ИНН,НомерСчФакт,ДатаСчФакт,КПП,ЮридическийАдресПокупателя, SRID");
Запрос = Новый Запрос("ВЫБРАТЬ
| ТЗ.НаименованиеПокупателя КАК НаименованиеПокупателя,
| ТЗ.ИНН КАК ИНН,
| ТЗ.НомерСчФакт КАК НомерСчФакт,
| ТЗ.ДатаСчФакт КАК ДатаСчФакт,
| ТЗ.КПП КАК КПП,
// письмерова 03.09.2025 BSLR-4698
| ТЗ.SRID КАК SRID,
| ТЗ.ЮридическийАдресПокупателя КАК ЮридическийАдресПокупателя
|ПОМЕСТИТЬ Таблица
|ИЗ
| &ТЗ КАК ТЗ
|ГДЕ
| ТЗ.ИНН <> """"
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Таблица.НаименованиеПокупателя КАК НаименованиеПокупателя,
| Таблица.ИНН КАК ИНН,
| Таблица.НомерСчФакт КАК НомерСчФакт,
| Таблица.ДатаСчФакт КАК ДатаСчФакт,
| Таблица.КПП КАК КПП,
// письмерова 03.09.2025 BSLR-4698
| Таблица.SRID КАК SRID,
| Таблица.ЮридическийАдресПокупателя КАК ЮридическийАдресПокупателя,
| ВЫБОР
| КОГДА Контрагенты.Ссылка ЕСТЬ NULL
| ТОГДА ""ИНН "" + (ВЫРАЗИТЬ(Таблица.ИНН КАК СТРОКА(15))) + "" "" + (ВЫРАЗИТЬ(Таблица.НаименованиеПокупателя КАК СТРОКА(200)))
| ИНАЧЕ Контрагенты.Ссылка
| КОНЕЦ КАК Покупатель
|ИЗ
| Таблица КАК Таблица
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
| ПО Таблица.ИНН = Контрагенты.ИНН");
Запрос.УстановитьПараметр("ТЗ",ТаблицаДанныхЮЛ);
ТаблицаДанных = Запрос.Выполнить().Выгрузить();
Для Каждого СТр из Объект.Товары Цикл
// письмерова 03.09.2025 BSLR-4698
Если Маркетплейс = Перечисления.топ_ТорговыеПлощадки.OZON ТОгда
Если Стр.НомерСчФакт <> "" Тогда
НайтиСтроки = ТаблицаДанных.НайтиСтроки(Новый Структура("НомерСчФакт",Стр.НомерСчФакт));
Если НайтиСтроки.Количество() ТОгда
Стр.Покупатель = НайтиСтроки[0].Покупатель;
Стр.ДатаСчФакт = НайтиСтроки[0].ДатаСчФакт;
Если ТипЗнч(Стр.Покупатель) = Тип("Строка") Тогда // не нашли по ИНН
Результат.Сообщение = Результат.Сообщение + "В строке " + Стр.НомерСтроки + " не найден контрагент " + НайтиСтроки[0].Покупатель + Символы.ПС;
Результат.Ошибка = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ИначеЕсли Маркетплейс = Перечисления.топ_ТорговыеПлощадки.Wildberries ТОгда
Если Стр.ПродажаЮЛ Тогда
НайтиСтроки = ТаблицаДанных.НайтиСтроки(Новый Структура("SRID",Стр.Идентификатор));
Если НайтиСтроки.Количество() ТОгда
Стр.Покупатель = НайтиСтроки[0].Покупатель;
Стр.ДатаСчФакт = НайтиСтроки[0].ДатаСчФакт;
Стр.НомерСчФакт = НайтиСтроки[0].НомерСчФакт;
Если ТипЗнч(Стр.Покупатель) = Тип("Строка") Тогда // не нашли по ИНН
Результат.Сообщение = Результат.Сообщение + "В строке " + Стр.НомерСтроки + " не найден контрагент " + НайтиСтроки[0].Покупатель + Символы.ПС;
Результат.Ошибка = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли; // -- BSLR-4698
КонецЦикла;
Возврат Результат;
КонецФункции
&НаСервере
Функция СоздатьЮЛ(Данные,Организация,ЭтоПоставщик = Ложь)
// Предварительный поиск по ИНН
// BSLR-3215
НовыйКонтрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН",Данные.Инн);
Если НовыйКонтрагент = Справочники.Контрагенты.ПустаяСсылка() Тогда // создаем
//партнер
НовыйПартнер = Справочники.Партнеры.СоздатьЭлемент();
НовыйПартнер.Наименование = Данные.НаименованиеПокупателя;
НовыйПартнер.ГруппаДоступа = ГруппаДоступаПартнера;
НовыйПартнер.НаименованиеПолное = НовыйПартнер.Наименование;
НовыйПартнер.клиент = истина;
НовыйПартнер.ЮрФизЛицо = Перечисления.КомпанияЧастноеЛицо.Компания;//ЧастноеЛицо
Если Данные.ЮридическийАдресПокупателя <> "" Тогда // BSLR-3215
нЭл = НовыйПартнер.КонтактнаяИнформация.Добавить();
нЭл.тип = Перечисления.ТипыКонтактнойИнформации.Адрес;
нЭл.Вид = Справочники.ВидыКонтактнойИнформации.АдресПартнера;
нЭл.Представление = Данные.ЮридическийАдресПокупателя;
КонецЕсли; // BSLR-3215
Если ЭтоПоставщик Тогда
НовыйПартнер.Поставщик = Истина; // BSLR-3215
КонецЕсли;
НовыйПартнер.Записать();
// Данные: ИНН, КПП, Наименование, Адрес
// форму собственности проверяем по заполнению КПП - если пусто, это ИП
// контрагент
НовыйКонтрагент = Справочники.Контрагенты.СоздатьЭлемент();
НовыйКонтрагент.Наименование= Данные.НаименованиеПокупателя;
НовыйКонтрагент.НаименованиеПолное= Данные.НаименованиеПокупателя;
НовыйКонтрагент.ИНН= Данные.ИНН;
НовыйКонтрагент.КПП= Данные.КПП;
НовыйКонтрагент.СтранаРегистрации = Справочники.СтраныМира.Россия;
НовыйКонтрагент.ЮрФизЛицо = ?(НовыйКонтрагент.КПП = "",Перечисления.ЮрФизЛицо.ИндивидуальныйПредприниматель,Перечисления.ЮрФизЛицо.ЮрЛицо);
НовыйКонтрагент.Партнер = НовыйПартнер.Ссылка;
Если Данные.ЮридическийАдресПокупателя <> "" Тогда
нЭл = НовыйКонтрагент.КонтактнаяИнформация.Добавить();
нЭл.тип = Перечисления.ТипыКонтактнойИнформации.Адрес;
нЭл.Вид = Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента;
нЭл.Представление = Данные.ЮридическийАдресПокупателя;
нЭл = НовыйКонтрагент.КонтактнаяИнформация.Добавить();
нЭл.тип = Перечисления.ТипыКонтактнойИнформации.Адрес;
нЭл.Вид = Справочники.ВидыКонтактнойИнформации.ФактАдресКонтрагента;
нЭл.Представление = Данные.ЮридическийАдресПокупателя;
КонецЕсли;
НовыйКонтрагент.Записать(); //BSLR-4750, Чупраков А.Н., 17.09.25
КонецЕсли; // BSLR-3215
Возврат НовыйКонтрагент;
КонецФункции
&НаСервере
Функция ПроверитьЗаполнениеЮЛ(ЭтоПеревыставление = Ложь)
// письмерова 14.11.2024 BSLR-3215
Результат = Ложь;
Если НЕ ЭтоПеревыставление ТОгда
Для Каждого Стр из Объект.Товары Цикл
Если Стр.НомерСчФакт <> "" Тогда
Если ТипЗнч(Стр.Покупатель) = Тип("Строка") Тогда // есть сч/факт, нет контрагента
Результат = Истина;
Прервать;
КонецЕсли;
Если Стр.Покупатель = Справочники.Контрагенты.ПустаяСсылка() Тогда // есть сч/факт, нет контрагента
Результат = Истина;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Иначе
Для Каждого Стр Из Объект.ПеревыставлениеУслуг Цикл
Если ТипЗнч(Стр.Поставщик) = Тип("Строка") Тогда // есть сч/факт, нет контрагента
Результат = Истина;
Прервать;
КонецЕсли;
Если Стр.Поставщик = Справочники.Контрагенты.ПустаяСсылка() Тогда // есть сч/факт, нет контрагента
Результат = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат Результат;
КонецФункции
#КонецОбласти
// письмерова 18.11.2025 BSLR-3887
#область ЗагрузкаУслугOzon
&НаКлиенте
Процедура ЗагрузитьУслугиОЗОН(Команда)
Если Объект.Услуги.Количество() Тогда
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопросОбОчищенииТаблицыУслуг", ЭтаФорма);
ПоказатьВопрос(ОписаниеОповещения, "Таблица услуг содержит данные. Очистить?", РежимДиалогаВопрос.ДаНетОтмена);
Иначе
ЗагрузитьУслугиОЗОНпоAPI(Неопределено);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеОтветаНаВопросОбОчищенииТаблицыУслуг(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Отмена Тогда
Возврат;
КонецЕсли;
Если Результат = КодВозвратаДиалога.Да Тогда
Объект.Услуги.Очистить();
ЗагрузитьУслугиОЗОНпоAPI(Неопределено);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьУслугиОЗОНпоAPI(Команда)
Если (не ЗначениеЗаполнено(Объект.ДатаНачала)) или (не ЗначениеЗаполнено(Объект.ДатаОкончания)) тогда
сообщение = новый СообщениеПользователю;
сообщение.Текст = "Заполните поле Период";
сообщение.Сообщить();
Возврат;
КонецЕсли;
Если не ЗначениеЗаполнено(Объект.ЛичныйКабинет)тогда
сообщение = новый СообщениеПользователю;
сообщение.Текст = "Выберите Личный Кабинет";
сообщение.Сообщить();
Возврат;
КонецЕсли;
Если Объект.ДатаНачала > Объект.ДатаОкончания Тогда
ВременнаяПеременная = Объект.ДатаНачала;
Объект.ДатаНачала = Объект.ДатаОкончания;
Объект.ДатаОкончания = ВременнаяПеременная;
КонецЕсли;
ПараметрыЗапуска = Новый Структура;
ПараметрыЗапуска.Вставить("Клиент", Клиент);
ПараметрыЗапуска.Вставить("Токен", Токен);
ПараметрыЗапуска.Вставить("Токен2", Токен2);
ПараметрыЗапуска.Вставить("ДатаНачала", НачалоДня(Объект.ДатаНачала));
ПараметрыЗапуска.Вставить("ДатаОкончания", КонецДня(Объект.ДатаОкончания));
ПараметрыЗапуска.Вставить("СуммаУслугХранения", Объект.СуммаУслугХранения+Объект.СумаУслугПлатнойПриемки+Объект.СуммаДоплаты);
ПараметрыЗапуска.Вставить("ЛичныйКабинет", Объект.ЛичныйКабинет);
ПараметрыЗапуска.Вставить("ВыгружатьДетализацию", Объект.ВыгужатьДетализациюWB_Excel);
ПараметрыЗапуска.Вставить("МП", Маркетплейс);
ПараметрыЗапуска.Вставить("ПродажиВРБВПродажахРФ", Объект.ПродажиВРБВПродажахРФ);
ПараметрыЗапуска.Вставить("УдержатьСуммуДоставкиПриВыкупе", Объект.УдержатьСуммуДоставкиПриВыкупе);
ПараметрыЗапуска.Вставить("ВключитьВСуммуКомиссииИздержкиПоПеревозке", Объект.ВключитьВСуммуКомиссииИздержкиПоПеревозке);
ПараметрыЗапуска.Вставить("ВключитьВСуммуКомиссииВесьЭкваринг", Объект.ВключитьВСуммуКомиссииВесьЭкваринг);
СтруктураФоновогоЗадания = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ЗагрузитьДанныеОтчетКоммисионера(ПараметрыЗапуска, УникальныйИдентификатор);
ИДЗадания = СтруктураФоновогоЗадания.ИдентификаторЗадания;
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ПараметрыОжидания.ВыводитьПрогрессВыполнения = Истина;
ПараметрыОжидания.Интервал = 2;
ДлительныеОперацииКлиент.ОжидатьЗавершение(СтруктураФоновогоЗадания, Новый ОписаниеОповещения("ПослеВыполненияКомандыУслугиВФоне", ЭтотОбъект), ПараметрыОжидания);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыполненияКомандыУслугиВФоне(Результат, ДополнительныеПараметры) Экспорт
Если ТипЗнч(Результат) = Тип("Структура") Тогда
Если Результат.Статус = "Выполнено" Тогда //получили результат
// письмерова 16.04.2026 BSLR-5483
ОбработатьРезультатЗагрузкиУслугНаСервере(Результат.АдресРезультата);
ИначеЕсли Результат.Статус = "Ошибка" Тогда //не получили результат
ПоказатьОповещениеПользователя(,,Результат.КраткоеПредставлениеОшибки,
БиблиотекаКартинок.Ошибка32,
СтатусОповещенияПользователя.Информация);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// письмерова 16.04.2026 BSLR-5483
&НаСервере
Процедура ОбработатьРезультатЗагрузкиУслугНаСервере(АдресРезультата)
РезультатВыполнения = ПолучитьИзВременногоХранилища(АдресРезультата);
Если ТипЗнч(РезультатВыполнения) = Тип("Структура") Тогда
Если ТипЗнч(РезультатВыполнения) = Тип("Структура") Тогда
Объект.Услуги.Загрузить(РезультатВыполнения.СписокУслуг);
Если Объект.ЛичныйКабинет.ЗагружатьВыплатыПоМеханикамЛояльностиВУслугу Тогда
СуммаЛояльности = Объект.Товары.Итог("ВыплатыПоМеханикамЛояльностиПартнеров");
Если СуммаЛояльности <> 0 Тогда
СтрокаУслуг = Объект.Услуги.Добавить();
СтрокаУслуг.УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоРеквизиту("ЛитералУслуги","PaymentsBasedOnPartnerLoyaltyMechanics");
СтрокаУслуг.Наименование = СтрокаУслуг.УслугаМП.Наименование;
СтрокаУслуг.НаименованиеМП = СтрокаУслуг.УслугаМП.ЛитералУслуги;
СтрокаУслуг.Номенклатура = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьНоменклатуруДопУслугиМП(Перечисления.топ_ТорговыеПлощадки.OZON, СтрокаУслуг.УслугаМП);
СтавкаНДС = топ_ОбщийВызовСервера.БИТ_СтавкаНДС_Номенклатуры(СтрокаУслуг.Номенклатура,ОБъект.ЛичныйКабинет,Период.ДатаОкончания);
СтавкаНДСЗнач = топ_ОбщийВызовСервера.БИТ_ПолучитьЗначениеСтавкиНДС(СтавкаНДС);
СтрокаУслуг.СтавкаНДС = Строка(СтавкаНДС);
СтрокаУслуг.Сумма = - СуммаЛояльности;
СтрокаУслуг.СуммаНДС = СтрокаУслуг.Сумма * СтавкаНДСЗнач / (100+СтавкаНДСЗнач);
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(РезультатВыполнения.Сообщение) Тогда
ОбщегоНазначения.СообщитьПользователю(РезультатВыполнения.Сообщение);
КонецЕсли;
ЭтаФорма.Модифицированность = Истина;
КонецЕсли;
КонецЕсли;
УдалитьИзВременногоХранилища(АдресРезультата);
КонецПроцедуры
#КонецОбласти
#Область ЗагрузкаИзЭксельWBНовая
&НаСервере
Функция ЗагрузитьНаСервереWB(Знач Адрес, Расширение, ЭтоВыкупы)
Результат = Новый Структура("Ошибка, Сообщение, СписокТоваров, СписокУслуг",
Ложь, "", Новый Массив, Новый Массив);
ПерваяСтрока = 0;
ТаблицаТоваров = ПолучитьТаблицуЗагрузкиТоваровWB();
ФайлВременногоХранилища = ПолучитьИзВременногоХранилища(Адрес);
ИмяФайла = ПолучитьИмяВременногоФайла(Расширение);
Попытка
ФайлВременногоХранилища.Записать(ИмяФайла);
Исключение
Результат.Ошибка = Истина;
Результат.Сообщение = "Ошибка при загрузке файла, повторите попытку";
Возврат Результат;
КонецПопытки;;
УдалитьИзВременногоХранилища(Адрес);
MXL = Новый ТабличныйДокумент;
MXL.Прочитать(ИмяФайла);
Файл = Новый Файл(ИмяФайла);
Если Файл.Существует() Тогда
УдалитьФайлы(ИмяФайла);
КонецЕсли;
КоличествоСтрок = MXL.ВысотаТаблицы;
КоличествоКолонок = MXL.ШиринаСтраницы;
НовыйФорматФайла = Истина;
Для ТекущаяКолонка = 1 По 5 Цикл
ТекстЯчейки = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(1) + "C" + ТекущаяКолонка).ТекущаяОбласть.Текст);
Если ТекстЯчейки = "Номер поставки" Тогда
НовыйФорматФайла = Ложь;
Прервать;
КонецЕсли;
КонецЦикла;
Если НовыйФорматФайла ТОгда //BSLR-3067
МассивЗаголовковФайла = ЗаголовкиТаблицыWB_NEW();
Иначе
Если Объект.ДатаНачала >= Дата(2024,01,29) ТОгда // еще один формат с 29.01.2024
МассивЗаголовковФайла = ЗаголовкиТаблицыWB_NEW(Истина);
Иначе
МассивЗаголовковФайла = ЗаголовкиТаблицыWB();
КонецЕсли;
КонецЕсли;
ПерваяСтрока = 2; // BSLR-3859
Если ПерваяСтрока = 0 Тогда
Результат.Ошибка = Истина;
ОбщегоНазначения.СообщитьПользователю("Выбран не тот документ, скачайте из ЛК на маркетплейсе документ ""Детализация по продажам""");
Возврат Результат;
КонецЕсли;
НомераКолонокФайла = СоответствиеКолонокФайлаЗагрузкиWB(MXL, ПерваяСтрока-1);
ОбщегоНазначения.СообщитьПользователю("Не удалось определить дату входящего документа из файла. Укажите дату вручную");
Если Не ЭтоВыкупы ТОгда
Объект.НомерВходящегоДокумента = "";
Объект.ДатаВходящегоДокумента = "";
Объект.НомерВходящегоДокументаВыкупа = "";
Объект.ДатаВходящегоДокументаВыкупа = "";
Иначе
Объект.НомерВходящегоДокументаВыкупа = "";
Объект.ДатаВходящегоДокументаВыкупа = "";
КонецЕсли;
// письмерова 16.10.2025 BSLR-4460
МассивДляУдаления = Новый Массив;
ТаблицаКомпенсаций = ПолучитьТаблицуЗагрузкиТоваровWB();
Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок Цикл
Если Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.ШтрихКод).ТекущаяОбласть.Текст) = ""
И Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.ОбоснованиеДляОплаты).ТекущаяОбласть.Текст) = "" Тогда // письмерова 21.12.2023 BSLR-2959
ПРодолжить; // шк заполнен всегда
КонецЕсли;
Если Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.ШтрихКод).ТекущаяОбласть.Текст) = "Баркод" Тогда // письмерова 27.02.2026 BSLR-5173
ПРодолжить;
КонецЕсли;
КоличествоПродано = Число(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.КоличествоПродано).ТекущаяОбласть.Текст);
КоличествоВозврат = Число(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.КоличествоПродано).ТекущаяОбласть.Текст);
КПеречислению = Число(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.СуммаКВыплате).ТекущаяОбласть.Текст);
ТипДокумента = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.ТипДокумента).ТекущаяОбласть.Текст);
ОбоснованиеДляОплаты = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.ОбоснованиеДляОплаты).ТекущаяОбласть.Текст);
Если ТипДокумента = "Возврат" или ТипДокумента = "возврат" Тогда // письмерова 13.03.2024 BSLR-3355
//Если ЭтоВыкупы Тогда - BSLR-4287 - вернули выкупы в отчет комиссионера
// Продолжить;
//КонецЕсли;
НоваяСтрока = ТаблицаТоваров.Добавить();
НоваяСтрока.ТипОперации = "Возврат";
НоваяСтрока.Количество = КоличествоВозврат;
НоваяСтрока.Количество = - НоваяСтрока.Количество;
ЗаполнитьСтрокуТаблицыТоваровWB(НоваяСтрока, MXL, ТекущаяСтрока, НомераКолонокФайла, Истина, ЭтоВыкупы, Объект.ВключитьВСуммуПродажВозмещения); // письмерова 14.03.2024 BSLR-3357
Если ОбоснованиеДляОплаты = "Возмещение за выдачу и возврат товаров на ПВЗ" Тогда
НоваяСтрока.ТипОперации = ОбоснованиеДляОплаты;
НоваяСтрока.ВозмещениеВыдачаВозврат = - НоваяСтрока.ВозмещениеВыдачаВозврат;
НоваяСтрока.Комиссия = - НоваяСтрока.Комиссия;
НоваяСтрока.НДСКомиссии = - НоваяСтрока.НДСКомиссии;
КонецЕсли;
Иначе
НоваяСтрока = ТаблицаТоваров.Добавить();
Если КПеречислению <> 0 Тогда
НоваяСтрока.ТипОперации = "Продажа"
Иначе
НоваяСтрока.ТипОперации = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.ТипОперации).ТекущаяОбласть.Текст);
КонецЕсли;
НоваяСтрока.Количество = КоличествоПродано;
ЗаполнитьСтрокуТаблицыТоваровWB(НоваяСтрока, MXL, ТекущаяСтрока, НомераКолонокФайла, , ЭтоВыкупы, Объект.ВключитьВСуммуПродажВозмещения); // письмерова 14.03.2024 BSLR-3357
КонецЕсли;
// письмерова 14.03.2025 BSLR-4435
Если ОбоснованиеДляОплаты = "Возмещение за выдачу и возврат товаров на ПВЗ" Тогда
НоваяСтрока.НДСКомиссии = 0;
КонецЕсли;
// письмерова 25.08.2025 BSLR-4868, BSLR-4934 ++
Если ОбоснованиеДляОплаты = "Компенсация скидки по программе лояльности" Или
ОбоснованиеДляОплаты = "Стоимость участия в программе лояльности" Или
ОбоснованиеДляОплаты = "Сумма удержанная за начисленные баллы программы лояльности" Тогда
НоваяСтрока.ТипОперации = ОбоснованиеДляОплаты;
КонецЕсли;
Если ОбоснованиеДляОплаты = "Коррекция суммы удержанной за начисленные баллы программы лояльности" Тогда
НоваяСтрока.ТипОперации = "Сумма удержанная за начисленные баллы программы лояльности";
КонецЕсли; // BSLR-4934 --
// письмерова 16.10.2025 BSLR-4460 ++
Если ОбоснованиеДляОплаты = "Компенсация потерянного товара" или
ОбоснованиеДляОплаты = "Компенсация брака" Или
ОбоснованиеДляОплаты = "Компенсация ущерба" Или
ОбоснованиеДляОплаты = "Добровольная компенсация при возврате" Или
ОбоснованиеДляОплаты = "Компенсация подмененного товара" Тогда
НоваяСтрока.ТипОперации = ОбоснованиеДляОплаты;
МассивДляУдаления.Добавить(НоваяСтрока);
нСтр = ТаблицаКомпенсаций.Добавить();
ЗаполнитьЗначенияСвойств(нСтр,НоваяСтрока);
КонецЕсли;
КонецЦикла;
Для Каждого Эл Из МассивДляУдаления Цикл
ТаблицаТоваров.Удалить(Эл);
КонецЦикла; // BSLR-4460 --
ДоставкаВыкупы = 0; // письмерова 09.01.2024 BSLR-4099
Если ТаблицаТоваров.Количество() Тогда
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
Если Не ЭтоВыкупы Тогда // письмерова 21.12.2023 BSLR-2959 - для усн и осн стало одинаково
// письмерова 04.12.2023 BSLR-2814
РезультатУслуги = ОбработатьТаблицуУслугВБ_УСН(ТаблицаТоваров,Объект.СуммаУслугХранения+Объект.СумаУслугПлатнойПриемки+Объект.СуммаДоплаты); // письмерова 13.12.2023 BSLR-2951
ТаблицаУслуг = РезультатУслуги.ТаблицаУслуг;
ТаблицаТоваров = ОбработатьТаблицуТоваровВБ(ТаблицаТоваров, ЭтоВыкупы, Истина,РезультатУслуги); // письмерова 06.02.2024 BSLR-3188
// письмерова 20.03.2024 BSLR-2959
Если РезультатУслуги.ПлатнаяПриемка <> 0 Тогда
Объект.СумаУслугПлатнойПриемки = РезультатУслуги.ПлатнаяПриемка;
КонецЕсли;
Если РезультатУслуги.Доплаты <> 0 Тогда
Объект.СуммаДоплаты = РезультатУслуги.Доплаты;
КонецЕсли;
Если РезультатУслуги.Хранение <> 0 Тогда
Объект.СуммаУслугХранения = РезультатУслуги.Хранение;
КонецЕсли;
Иначе
ТаблицаУслуг = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьТаблицу(Истина); // письмерова 20.03.2024 BSLR-2959 - пустая таблица, по выкупам нет услуг
// письмерова 09.01.2024 BSLR-4099
ДанныеВыкупов = ОбработатьДанныеПоВыкупамВБ(ТаблицаТоваров);
ТаблицаТоваров = ДанныеВыкупов.ВремТаблВЫкуп;
ДоставкаВыкупы = ДанныеВыкупов.Разница;
КонецЕсли;
Результат.СписокТоваров = ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаТоваров);
Результат.СписокУслуг = ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаУслуг);
Если Не ЭтоВыкупы Тогда // BSLR-4102
ДанныеЗагрузки = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьДанныеИзВыгрузки(Результат, Маркетплейс, Объект.ЛичныйКабинет, Истина, Объект.ДатаОкончания,ЭтоВыкупы); // письмерова 28.02.2024 BSLR-3309
Иначе
ДанныеЗагрузки = Новый Структура("Товары, Услуги, Ошибка, Сообщение",ТаблицаТоваров, Новый ТаблицаЗначений,Ложь,"");
КонецЕсли;
Если ДанныеЗагрузки.Ошибка Тогда
Результат.Ошибка = Истина;
Результат.Сообщение = Результат.Сообщение;
Возврат Результат;
КонецЕсли;
// получить признак набора для номенклатуры
Если Константы.ИспользоватьНаборы.Получить() Тогда
Если Не ЭтоВыкупы Тогда // BSLR-4102
ДанныеЗагрузки.Товары = топ_ОбщийВызовСервера.ДополнитьДаннымиНаборов(ДанныеЗагрузки.Товары);
КонецЕсли;
КонецЕсли;
// обработка компенсаций письмерова 16.10.2025 BSLR-4460
Если ТаблицаКомпенсаций.Количество() ТОгда
РезультатКомпенсаций = Новый Структура("Ошибка, Сообщение, СписокТоваров, СписокУслуг",
Ложь, "", Новый Массив, Новый Массив);
РезультатКомпенсаций.СписокТоваров = ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаКомпенсаций);
ДанныеКомпенсаций = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьДанныеИзВыгрузки(РезультатКомпенсаций,
Маркетплейс, Объект.ЛичныйКабинет, Истина, Объект.ДатаОкончания,ЭтоВыкупы);
Если Константы.ИспользоватьНаборы.Получить() Тогда
ДанныеКомпенсаций.Товары = топ_ОбщийВызовСервера.ДополнитьДаннымиНаборов(ДанныеКомпенсаций.Товары);
КонецЕсли;
ЗаполнитьТабЧастьКомпенсации(ДанныеКомпенсаций.Товары);
КонецЕсли;
Если ЭтоВыкупы Тогда
Результат.Вставить("ТоварыВыкуп", топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ТаблицаЗначенийВМассив(ДанныеЗагрузки.Товары));
Результат.Вставить("ДоставкаВыкупы", ДоставкаВыкупы);// письмерова 09.01.2024 BSLR-4099
Иначе
Результат.Вставить("Товары", топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ТаблицаЗначенийВМассив(ДанныеЗагрузки.Товары));
Результат.Вставить("Услуги", топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ТаблицаЗначенийВМассив(ДанныеЗагрузки.Услуги));
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
// письмерова 17.11.2023 BSLR-2814
&НаСервере
Функция ОбработатьТаблицуУслугВБ_УСН(ТаблицаТоваров, СуммаУслугХранения)
ТаблицаУслуг = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьТаблицу(Истина);
ПереченьДопУслуг = топ_РаботаСМаркетплейсами_Wildberries.ПолучитьПереченьДопУслугМП();
НДСДопУслуг = топ_РаботаСМаркетплейсами_Wildberries.ПолучитьНДСДопУслугМП();
// письмерова 04.12.2023 BSLR-2814
Результат = Новый Структура;
Результат.Вставить("ТаблицаУслуг",ТаблицаУслуг);
СтруктураУслуг = Новый Соответствие;
СуммаКомпенсацииБрака = 0;
СуммаАвансовойОплаты = 0;
Для Каждого Стр из ТаблицаТоваров Цикл
Если Стр.ОбоснованиеДляОплаты = "Частичная компенсация брака" ТОгда
СуммаКомпенсацииБрака = СуммаКомпенсацииБрака + Стр.Сумма;
ИначеЕсли Стр.ОбоснованиеДляОплаты = "Авансовая оплата за товар без движения" Тогда
СуммаАвансовойОплаты = СуммаАвансовойОплаты + Стр.Сумма;
КонецЕсли;
КонецЦикла;
// расчет суммы международной доставки
УслугиПоДоставке_Международная = 0;
УслугиПоДоставке = 0;
WB_komission = 0;
ppvz_reward = 0;
WB_komission_ВЗ = 0;
ppvz_reward_ВЗ = 0;
ВозмещениеИздержекПоПеревозке = 0;
// письмерова 17.04.2024 BSLR-3481
ВозмещениеИздержекПоПеревозке_V2 = 0;
// письмерова 20.03.2024 BSLR-2959
Хранение = 0;
Удержания = 0;
ПлатнаяПриемка = 0;
Доплаты = 0;
// письмерова 26.04.2024 BSLR-3509
ЭквайрингОТдельно = 0;
ЭквайрингОТдельно_ВЗ = 0;
ПрочиеВыплаты = 0;
КомпенсацияУщерба = 0;
МассивДляУдаления = новый Массив;
// письмерова 27.11.2024 BSLR-4102
ЭквайрингОТдельноБезНуля = 0;
ЭквайрингОТдельно_ВЗБезНуля = 0;
СуммаВозмещениеПВЗ = 0; // письмерова 14.03.2025 BSLR-4435
СуммаКорректировка = 0; // BSLR-4558
СуммаВозмещениеЛояльности = 0; // BSLR-4868
СуммаСтоимостьУчастияЛояльности = 0; // BSLR-4934
СуммаУдержанияЗаБаллыЛояльности = 0; // BSLR-4934
РазовоеНачисление = 0; // BSLR-5301
Для Каждого Стр из ТаблицаТоваров Цикл
Если Стр.ТипОперации = "Возмещение издержек по перевозке" Или Стр.ТипОперации = "Возмещение издержек по перевозке/по складским операциям с товаром" Тогда // письмерова 05.04.2024 BSLR-3440
ВозмещениеИздержекПоПеревозке = ВозмещениеИздержекПоПеревозке + Стр.Комиссия;
ВозмещениеИздержекПоПеревозке_V2 = ВозмещениеИздержекПоПеревозке_V2 + Стр.ВозмещениеИздержек; // письмерова 17.04.2024 BSLR-3481
КонецЕсли;
// BSLR-3796 // BSLR-4000
Если Стр.ТипОперации = "Логистика" Или Стр.ТипОперации = "логистика" ИЛИ Стр.ТипОперации = "Логистика сторно" ИЛИ Стр.ТипОперации = "Коррекция логистики" Тогда // письмерова 20.12.2023 BSLR-2959
Если Стр.СтранаПродажи <> "Россия" и Стр.СтранаПродажи <> "RU" ТОгда // письмерова 17.04.2024 BSLR-3481
УслугиПоДоставке_Международная = УслугиПоДоставке_Международная + Стр.УслугиПоДоставке;
Иначе
УслугиПоДоставке = УслугиПоДоставке + Стр.УслугиПоДоставке;
КонецЕсли;
КонецЕсли;
// письмерова 20.03.2024 BSLR-2959
Если СтрНайти(Врег(Стр.ТипОперации),"ХРАНЕНИ") > 0 Тогда // письмерова 17.04.2024 BSLR-3481
Хранение = Хранение + Стр.Хранение;
КонецЕсли;
Если СтрНайти(Врег(Стр.ТипОперации),"УДЕРЖАНИ") > 0 Тогда // письмерова 17.04.2024 BSLR-3481
// письмерова 26.04.2024 BSLR-3509
Если Объект.ДатаНачала < Дата(2024,4,1) ТОгда
Удержания = Удержания + Стр.Удержания;
Иначе
Если Стр.Удержания > 0 Тогда
Удержания = Удержания + Стр.Удержания;
Иначе
ПрочиеВыплаты = ПрочиеВыплаты + Стр.Удержания;
КонецЕсли;
КонецЕсли;
КонецЕсли;
//Если Стр.ТипОперации = "Пересчет платной приемки" Тогда - BSLR-4444
ПлатнаяПриемка = ПлатнаяПриемка + Стр.ПлатнаяПриемка;
//КонецЕсли;
Если СтрНайти(Врег(Стр.ТипОперации),"ДОПЛАТ") > 0 Тогда
Доплаты = Доплаты + Стр.Доплаты;
КонецЕсли;
// письмерова 30.04.2025 BSLR-4558
Если Стр.ТипОперации = "Корректировка" Тогда
СуммаКорректировка = СуммаКорректировка + Стр.Доплаты;
КонецЕсли;
// письмерова 26.04.2024 BSLR-3509
Если Объект.ДатаНачала >= Дата(2024,4,1) ТОгда
Если Стр.ТипОперации = "Компенсация потерянного товара" или
Стр.ТипОперации = "Компенсация брака" Или
Стр.ТипОперации = "Компенсация ущерба" Или // письмерова 03.07.2024 BSLR-3662
Стр.ТипОперации = "Добровольная компенсация при возврате" Или // письмерова 03.07.2024 BSLR-3662
Стр.ТипОперации = "Компенсация подмененного товара" Тогда
КомпенсацияУщерба = КомпенсацияУщерба + Стр.Сумма;
МассивДляУдаления.Добавить(Стр);
КонецЕсли;
КонецЕсли;
// пересчет комиссии вб и услуг поверенного
Если Стр.ТипОперации = "Продажа" Тогда
WB_komission = WB_komission + Стр.Комиссия; // письмерова 21.12.2023 BSLR-2959
Если (Стр.ОбоснованиеДляОплаты = "Логистика" Или Стр.ТипОперации = "логистика") и
(Стр.СтранаПродажи <> "Россия" и Стр.СтранаПродажи <> "RU") ТОгда // письмерова 17.04.2024 BSLR-3481
WB_komission = WB_komission + Стр.УслугиПоДоставке;
КонецЕсли;
ppvz_reward = ppvz_reward + Стр.Эквайринг + Стр.ВозмещениеВыдачаВозврат;
// письмерова 26.04.2024 BSLR-3509
Если Стр.ПроцентЭквайринга <> 0 Тогда
ЭквайрингОТдельно = ЭквайрингОТдельно + Стр.Эквайринг; КонецЕсли;
ИначеЕсли Стр.ТипОперации = "Возврат" Тогда
WB_komission_ВЗ = WB_komission_ВЗ - (Стр.Комиссия);// + Стр.НДСКомиссии);
ppvz_reward_ВЗ = ppvz_reward_ВЗ - (Стр.Эквайринг + Стр.ВозмещениеВыдачаВозврат);
// письмерова 26.04.2024 BSLR-3509
Если Стр.ПроцентЭквайринга <> 0 Тогда
ЭквайрингОТдельно_ВЗ = ЭквайрингОТдельно_ВЗ - Стр.Эквайринг; КонецЕсли;
КонецЕсли;
// письмерова 27.11.2024 BSLR-4102
Если Стр.ТипОперации = "Возврат" Тогда
ЭквайрингОТдельно_ВЗБезНуля = ЭквайрингОТдельно_ВЗБезНуля - Стр.Эквайринг;
Иначе
ЭквайрингОТдельноБезНуля = ЭквайрингОТдельноБезНуля + Стр.Эквайринг;
КонецЕсли;
// письмерова 14.03.2025 BSLR-4435
Если Стр.ТипОперации = "Возмещение за выдачу и возврат товаров на ПВЗ" Тогда
СуммаВозмещениеПВЗ = СуммаВозмещениеПВЗ + Стр.ВозмещениеВыдачаВозврат;
КонецЕсли;
// письмерова 26.08.2025 BSLR-4868 - компенсация лояльности
Если Стр.ТипОперации = "Компенсация скидки по программе лояльности" Тогда
СуммаВозмещениеЛояльности = СуммаВозмещениеЛояльности + Стр.КомпенсацияЛояльности;
КонецЕсли;
// письмерова 06.10.2025 BSLR-4934 ++
Если Стр.ТипОперации = "Стоимость участия в программе лояльности" Тогда
СуммаСтоимостьУчастияЛояльности = СуммаСтоимостьУчастияЛояльности + Стр.СтоимостьУчастияЛояльности;
КонецЕсли;
Если Стр.ТипОперации = "Сумма удержанная за начисленные баллы программы лояльности" Тогда
СуммаУдержанияЗаБаллыЛояльности = СуммаУдержанияЗаБаллыЛояльности + Стр.УдержанияЗаБаллыЛояльности;
КонецЕсли; // BSLR-4934 --
Если Стр.ТипОперации = "Разовое изменение срока перечисления денежных средств" Тогда
РазовоеНачисление = РазовоеНачисление + Стр.РазовоеНачисление;
КонецЕсли;
КонецЦикла;
СуммаУслугХранения = Хранение + ПлатнаяПриемка + Доплаты; // BSLR-4102 - только файлы
Если ВозмещениеИздержекПоПеревозке_V2 = 0 Тогда
WB_komission_ИТОГ = WB_komission + СуммаУслугХранения - WB_komission_ВЗ + ВозмещениеИздержекПоПеревозке + УслугиПоДоставке;
ВозмещениеИздержекПоПеревозке_Итог = ВозмещениеИздержекПоПеревозке; //BSLR-3690
Иначе
// для повышения точности в комиссии нужно учитывать ВозмещениеИздержекПоПеревозке, у поверенного нужно использовать ВозмещениеИздержекПоПеревозке_V2, BSLR-3690
Если ВозмещениеИздержекПоПеревозке = 0 ТОгда
WB_komission_ИТОГ = WB_komission + СуммаУслугХранения - WB_komission_ВЗ + УслугиПоДоставке +
// BSLR-3796
?(НЕ Объект.ВключитьВСуммуКомиссииИздержкиПоПеревозке,ВозмещениеИздержекПоПеревозке_V2,0); // письмерова 08.07.2024 BSLR-3667 08.07.2024
Иначе
WB_komission_ИТОГ = WB_komission + СуммаУслугХранения - WB_komission_ВЗ + УслугиПоДоставке +
// BSLR-3796
?(НЕ Объект.ВключитьВСуммуКомиссииИздержкиПоПеревозке,ВозмещениеИздержекПоПеревозке,0); // письмерова 08.07.2024 BSLR-3667 08.07.2024
КонецЕсли;
ВозмещениеИздержекПоПеревозке_Итог = ВозмещениеИздержекПоПеревозке_V2; //BSLR-3690
КонецЕсли;
ppvz_reward_ИТОГ = ppvz_reward + ppvz_reward_ВЗ - ВозмещениеИздержекПоПеревозке_Итог; //BSLR-3690
// письмерова 26.04.2024 BSLR-3509
Если ЭквайрингОТдельно_ВЗ > 0 Тогда // письмерова 30.05.2024
ЭквайрингОТдельно_ИТОГ = ЭквайрингОТдельно - ЭквайрингОТдельно_ВЗ;
Иначе
ЭквайрингОТдельно_ИТОГ = ЭквайрингОТдельно + ЭквайрингОТдельно_ВЗ;
КонецЕсли;
// BSLR-4102 - смена знака у возвратов, экваринг без учета процента
Если Объект.ДатаНачала > Дата(2024,11,1) Тогда
WB_komission_ИТОГ = WB_komission + СуммаУслугХранения + WB_komission_ВЗ + УслугиПоДоставке + ВозмещениеИздержекПоПеревозке_V2;
ЭквайрингОТдельно_ИТОГ = ЭквайрингОТдельноБезНуля + ЭквайрингОТдельно_ВЗБезНуля;
КонецЕсли;
СтруктураУслуг.Вставить("delivery_EX", УслугиПоДоставке_Международная);
// письмерова 04.12.2023 BSLR-2814
Результат.Вставить("ВозмещениеИздержекПоПеревозке",ВозмещениеИздержекПоПеревозке_Итог); //BSLR-3690
Результат.Вставить("УслугиПоДоставке",УслугиПоДоставке);
Результат.Вставить("СуммаУслугХранения",СуммаУслугХранения);
Результат.Вставить("СуммаКомиссияВБ",WB_komission_ИТОГ- СуммаВозмещениеПВЗ + СуммаКорректировка); // письмерова 30.04.2025 BSLR-4558
// письмерова 20.03.2024 BSLR-2959
Результат.Вставить("Хранение",Хранение);
Результат.Вставить("ПлатнаяПриемка",ПлатнаяПриемка);
Результат.Вставить("Доплаты",Доплаты);
Результат.Вставить("Удержания",Удержания);
Результат.Вставить("СуммаКорректировка",СуммаКорректировка); // письмерова 30.04.2025 BSLR-4558
penalty = ТаблицаТоваров.Итог("Штрафы");
СтруктураУслуг.Вставить("WB_komission",WB_komission_ИТОГ - СуммаВозмещениеПВЗ + СуммаКорректировка); // письмерова 30.04.2025 BSLR-4558
//СтруктураУслуг.Вставить("ppvz_reward", ppvz_reward_ИТОГ); письмерова 26.04.2024 BSLR-3509
СтруктураУслуг.Вставить("penalty", penalty);
СтруктураУслуг.Вставить("other_deductions", Удержания); // прочие удержания // письмерова 20.03.2024 BSLR-2959
СтруктураУслуг.Вставить("advance_payment", СуммаАвансовойОплаты);
СтруктураУслуг.Вставить("partial_compensation", СуммаКомпенсацииБрака);
// письмерова 26.04.2024 BSLR-3509
Если Объект.ДатаНачала >= Дата(2024,4,1) ТОгда
СтруктураУслуг.Вставить("refund_on_acquiring", ЭквайрингОТдельно_ИТОГ);
Если КомпенсацияУщерба <> 0 ТОгда // BSLR-4460
СтруктураУслуг.Вставить("compensation_for_damage", - КомпенсацияУщерба);
КонецЕсли;
СтруктураУслуг.Вставить("other_payments", ПрочиеВыплаты);
СтруктураУслуг.Вставить("payment_schedule", РазовоеНачисление);
// BSLR-4934 ++
Если Объект.ДатаНачала >= Дата(2025,9,15) Тогда // услуги поверенного разделили
СтруктураУслуг.Вставить("rebill_logistic_cost",-ВозмещениеИздержекПоПеревозке_Итог);
СтруктураУслуг.Вставить("delivery_return_goods",ppvz_reward_ИТОГ - ЭквайрингОТдельно_ИТОГ + СуммаВозмещениеПВЗ + ВозмещениеИздержекПоПеревозке_Итог );
Иначе
СтруктураУслуг.Вставить("ppvz_reward",ppvz_reward_ИТОГ - ЭквайрингОТдельно_ИТОГ + СуммаВозмещениеПВЗ);
КонецЕсли; // BSLR-4934 --
Для Каждого Эл Из МассивДляУдаления Цикл
ТаблицаТоваров.Удалить(Эл);
КонецЦикла;
Иначе
СтруктураУслуг.Вставить("ppvz_reward", ppvz_reward_ИТОГ);
КонецЕсли;
// письмерова 06.10.2025 BSLR-4934 ++
Если Объект.ЛичныйКабинет.ЗагружатьВыплатыПоМеханикамЛояльностиВУслугу Тогда
Если СуммаВозмещениеЛояльности <> 0 ТОгда
СтруктураУслуг.Вставить("loyalty_compensation",- СуммаВозмещениеЛояльности);
КонецЕсли;
КонецЕсли;
Если СуммаСтоимостьУчастияЛояльности <> 0 ТОгда
СтруктураУслуг.Вставить("loyalty_program_cost",СуммаСтоимостьУчастияЛояльности);
КонецЕсли;
Если СуммаУдержанияЗаБаллыЛояльности <> 0 ТОгда
СтруктураУслуг.Вставить("loyalty_deductions",СуммаУдержанияЗаБаллыЛояльности);
КонецЕсли; // BSLR-4934 --
Для Каждого Услуга Из ПереченьДопУслуг Цикл
Если СтруктураУслуг.Получить(Услуга.Ключ) <> Неопределено Тогда
// письмерова 26.04.2024 BSLR-3509
Если Объект.ДатаНачала < Дата(2024,4,1) ТОгда // не добавляем новые услуги
Если Услуга.Ключ = "refund_on_acquiring" Или
Услуга.Ключ = "compensation_for_damage" Или
Услуга.Ключ = "other_payments" Тогда
ПРодолжить; КонецЕсли;
КонецЕсли;
СтрокаУслуг = ТаблицаУслуг.Добавить();
СтрокаУслуг.Наименование = Услуга.Значение;
СтрокаУслуг.НаименованиеМП = Услуга.Ключ;
СтрокаУслуг.УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоРеквизиту("ЛитералУслуги",Услуга.Ключ);
СтрокаУслуг.Номенклатура = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьНоменклатуруДопУслугиМП(Перечисления.топ_ТорговыеПлощадки.Wildberries, СтрокаУслуг.УслугаМП);
СтрокаУслуг.Цена = СтруктураУслуг[Услуга.Ключ];
СтрокаУслуг.СтавкаНДС = топ_ОбщийВызовСервера.БИТ_СтавкаНДС_Номенклатуры(СтрокаУслуг.Номенклатура,ОБъект.ЛичныйКабинет,Период.ДатаОкончания);
СтавкаНДСЗнач = топ_ОбщийВызовСервера.БИТ_ПолучитьЗначениеСтавкиНДС(СтрокаУслуг.СтавкаНДС);
СтрокаУслуг.Количество = 1;
СтрокаУслуг.Сумма = СтруктураУслуг[Услуга.Ключ];
СтрокаУслуг.СуммаНДС = СтрокаУслуг.Сумма * СтавкаНДСЗнач / (100+СтавкаНДСЗнач);
КонецЕсли;
КонецЦикла;
Возврат Результат; // письмерова 04.12.2023 BSLR-2814
КонецФункции
&НаСервере
Функция ОбработатьТаблицуТоваровВБ(ТаблицаТоваров, ЭтоВыкупы, ЭтоУСН, СтруктураУслуг = Неопределено)
//Отсекаем товары, на которых нет продаж, а есть только цифры комиссии, их мы выше уже собрали в таблицу
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| тз.rid КАК rid,
| тз.srid КАК srid,
| тз.site_country КАК site_country,
| тз.Артикул КАК Артикул,
| тз.Бренд КАК Бренд,
| тз.ИД_Заказ КАК ИД_Заказ,
| тз.ИД_Этикетки_Заказа КАК ИД_Этикетки_Заказа,
| тз.Идентификатор КАК Идентификатор,
| тз.Наименование КАК Наименование,
| тз.НомерОперации КАК НомерОперации,
| тз.НомерОтправления КАК НомерОтправления,
| тз.ТипОперации КАК ТипОперации,
| тз.НомерСтроки КАК НомерСтроки,
| тз.Размер КАК Размер,
| тз.Штрихкод КАК Штрихкод,
| тз.Цена КАК Цена,
| тз.Сумма КАК Сумма,
| тз.Количество КАК Количество,
| тз.Комиссия КАК Комиссия,
| тз.НДС КАК НДС,
| тз.НДСКомиссии КАК НДСКомиссии,
| тз.Доплаты КАК Доплаты,
| тз.Штрафы КАК Штрафы,
| тз.СуммаКВыплате КАК СуммаКВыплате,
// письмерова 25.08.2025 BSLR-4868
| тз.КомпенсацияЛояльности КАК КомпенсацияЛояльности,
// письмерова 30.10.2025 BSLR-4895
| тз.ПродажаЮЛ КАК ПродажаЮЛ,
// письмерова 19.04.2024 BSLR-3481
| ТЗ.КодНоменклатуры КАК КодНоменклатуры,
| тз.ОбоснованиеДляОплаты КАК ОбоснованиеДляОплаты
|ПОМЕСТИТЬ ВТ_ТЗ
|ИЗ
| &тз КАК тз
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_ТЗ.rid КАК rid,
| ВТ_ТЗ.srid КАК srid,
| ВТ_ТЗ.site_country КАК site_country,
| ВТ_ТЗ.Артикул КАК Артикул,
| ВТ_ТЗ.Бренд КАК Бренд,
| ВТ_ТЗ.ИД_Заказ КАК ИД_Заказ,
| ВТ_ТЗ.ИД_Этикетки_Заказа КАК ИД_Этикетки_Заказа,
// письмерова 30.10.2025 BSLR-4895
| ВЫБОР КОГДА ВТ_ТЗ.ПродажаЮЛ ТОГДА ВТ_ТЗ.srid ИНАЧЕ ВТ_ТЗ.Идентификатор КОНЕЦ КАК Идентификатор,
| ВТ_ТЗ.Наименование КАК Наименование,
| ВТ_ТЗ.НомерОперации КАК НомерОперации,
| ВТ_ТЗ.НомерОтправления КАК НомерОтправления,
| ВТ_ТЗ.ТипОперации КАК ТипОперации,
| ВТ_ТЗ.НомерСтроки КАК НомерСтроки,
| ВТ_ТЗ.Размер КАК Размер,
| ВТ_ТЗ.Штрихкод КАК Штрихкод,
| ВТ_ТЗ.Цена КАК Цена,
| ВТ_ТЗ.Сумма КАК Сумма,
| ВТ_ТЗ.Количество КАК Количество,
| ВТ_ТЗ.Комиссия КАК Комиссия,
| ВТ_ТЗ.НДС КАК НДС,
| ВТ_ТЗ.НДСКомиссии КАК НДСКомиссии,
| ВТ_ТЗ.Доплаты КАК Доплаты,
| ВТ_ТЗ.Штрафы КАК Штрафы,
| ВТ_ТЗ.СуммаКВыплате КАК СуммаКВыплате,
// письмерова 25.08.2025 BSLR-4868
| ВТ_ТЗ.КомпенсацияЛояльности КАК КомпенсацияЛояльности,
// письмерова 30.10.2025 BSLR-4895
| ВТ_ТЗ.ПродажаЮЛ КАК ПродажаЮЛ,
// письмерова 19.04.2024 BSLR-3481
| ВТ_ТЗ.КодНоменклатуры КАК КодНоменклатуры,
| ВТ_ТЗ.ОбоснованиеДляОплаты КАК ОбоснованиеДляОплаты
|ИЗ
| ВТ_ТЗ КАК ВТ_ТЗ
|ГДЕ
| ВЫБОР
| КОГДА &ЭтоВыкупы
| ТОГДА ВТ_ТЗ.ТипОперации = ""Продажа""
| ИЛИ ВТ_ТЗ.ТипОперации = ""Возврат""
// письмерова 20.12.2023 BSLR-2959 // письмерова 21.06.2024 BSLR-3602 // письмерова 15.08.2024 BSLR-3796
| ИЛИ ВТ_ТЗ.ТипОперации = ""Логистика"" ИЛИ ВТ_ТЗ.ТипОперации = ""логистика"" ИЛИ ВТ_ТЗ.ТипОперации = ""Коррекция логистики"" ИЛИ ВТ_ТЗ.ТипОперации = ""Логистика сторно""
| ИНАЧЕ ВТ_ТЗ.ТипОперации = ""Продажа""
| ИЛИ ВТ_ТЗ.ТипОперации = ""Возврат""
// письмерова 19.03.2024 BSLR-3355 // письмерова 25.08.2025 BSLR-4868
| ИЛИ ВТ_ТЗ.ТипОперации = ""Логистика"" ИЛИ ВТ_ТЗ.ТипОперации = ""логистика"" ИЛИ ВТ_ТЗ.ТипОперации = ""Компенсация скидки по программе лояльности""
// письмерова 06.10.2025 BSLR-4934
| ИЛИ ВТ_ТЗ.ТипОперации = ""Стоимость участия в программе лояльности"" ИЛИ ВТ_ТЗ.ТипОперации = ""Сумма удержанная за начисленные баллы программы лояльности""
| КОНЕЦ";
Запрос.УстановитьПараметр("тз", ТаблицаТоваров);
Запрос.УстановитьПараметр("ЭтоВыкупы", ЭтоВыкупы);
РезультатЗапроса = Запрос.Выполнить();
ТаблицаТоваровБезУслуг = РезультатЗапроса.Выгрузить();
#Область Выкупы
// письмерова 07.08.2023 BSLR-2288
Если ЭтоВыкупы Тогда // перенести суммы к выплате (комиссия по доставке) в итоговую сумму к выплате по заказу
// письмерова 31.10.2023 BSLR-2741
// сворачиваем выкупы, т.к. теперь приходит только логистика, без продажи
Если ЭтоУСН Тогда // письмерова 24.11.2023 BSLR-2814 // письмерова 19.04.2024 BSLR-3481
ТаблицаТоваровБезУслуг.Свернуть(" Артикул, Бренд, Идентификатор, Наименование, НомерОперации, НомерОтправления, ТипОперации, Размер,ШтрихКод, ОбоснованиеДляОплаты, Цена, КодНоменклатуры",
"Количество, Комиссия, НДС, НДСКомиссии, Сумма, СуммаКВыплате, Доплаты, Штрафы,SRID,RID, site_country,НомерСтроки,ИД_Заказ, ИД_Этикетки_Заказа");
Иначе
// BSLR-3745 // письмерова 19.04.2024 BSLR-3481
ТаблицаТоваровБезУслуг.Свернуть("SRID, Артикул, Бренд, Идентификатор, Наименование, НомерОперации, НомерОтправления, ТипОперации, Размер,ШтрихКод, ОбоснованиеДляОплаты, КодНоменклатуры",
"Количество, Комиссия, НДС, НДСКомиссии, Сумма, СуммаКВыплате, Доплаты, Штрафы,RID, site_country,НомерСтроки,ИД_Заказ, ИД_Этикетки_Заказа,Цена"); // письмерова 09.10.2023 BSLR-2677
КонецЕсли;
МассивДляУдаления = новый Массив;
Для каждого СТр Из ТаблицаТоваровБезУслуг Цикл
// письмерова 15.08.2024 BSLR-3796
Если Стр.ТипОперации = "Логистика" Или Стр.ТипОперации = "логистика" Или Стр.ТипОперации = "Коррекция логистики" ИЛи Стр.ТипОперации = "Логистика сторно" Тогда // письмерова 21.06.2024 BSLR-3602
//НайтиСтроки = ТаблицаТоваровБезУслуг.НайтиСтроки(Новый Структура("Идентификатор",Стр.Идентификатор));
НайтиСтроки = ТаблицаТоваровБезУслуг.НайтиСтроки(Новый Структура("SRID",Стр.SRID)); // BSLR-3745
КомиссияКПереносу = Стр.Комиссия; // письмерова 24.11.2023 BSLR-2814
Если НайтиСтроки.Количество() Тогда
Для Каждого Ст из НайтиСтроки Цикл // письмерова 15.08.2024 BSLR-3796
Если Ст.ТипОперации = "Логистика" Или Ст.ТипОперации = "логистика" Или Ст.ТипОперации = "Коррекция логистики" ИЛи Ст.ТипОперации = "Логистика сторно" Тогда // письмерова 21.06.2024 BSLR-3602
Продолжить;
КонецЕсли;
Если КомиссияКПереносу = 0 ТОгда // дважды может вычисть
Продолжить;
КонецЕсли;
//письмерова 13.10.2023 BSLR-2718
Если Ст.ТипОперации = "Возврат" или Ст.ТипОперации = "возврат" Тогда // меняем знаки // письмерова 13.03.2024 BSLR-3355
//Ст.СуммаКВыплате = Ст.СуммаКВыплате + Стр.Комиссия; - вся комиссия отнимается от операции с типом Продажа, письмерова 23.01.2024 BSLR-3095
//КомиссияКПереносу = 0;
Иначе
Ст.СуммаКВыплате = Ст.СуммаКВыплате - Стр.Комиссия;
КомиссияКПереносу = 0;
КонецЕсли;
Если ЭтоУСН Тогда // письмерова 24.11.2023 BSLR-2814 - здесь цифры не бьются, поэтому логистику распределяем ниже по сумме продажи
//Ст.Комиссия = Ст.Комиссия + Стр.Комиссия;
//КомиссияКПереносу = 0;
КонецЕсли;
КонецЦикла;
// BSLR-3745
Если КомиссияКПереносу = 0 ТОгда
МассивДляУдаления.Добавить(Стр);
КонецЕсли;
КонецЕсли;
// BSLR-3745
//МассивДляУдаления.Добавить(Стр);
КонецЕсли;
КонецЦикла;
// BSLR-3745 ++
// удаляем строки с логистикой
Для Каждого Эл Из МассивДляУдаления Цикл
ТаблицаТоваровБезУслуг.Удалить(Эл);
КонецЦикла;
ТаблицаТоваровБезУслуг.Свернуть("RID, site_country, Артикул, Бренд, ИД_Заказ, ИД_Этикетки_Заказа, Идентификатор, Наименование, ТипОперации, Размер,
|ШтрихКод, ОбоснованиеДляОплаты, КодНоменклатуры", "Цена,SRID, Количество, Комиссия, НДС, НДСКомиссии, Сумма, СуммаКВыплате, Доплаты, Штрафы"); // письмерова 09.10.2023 BSLR-2677
// вторая итерация, остались строки, которые не распределились по SRID
МассивДляУдаления.Очистить();
Для каждого СТр Из ТаблицаТоваровБезУслуг Цикл
// письмерова 15.08.2024 BSLR-3796
Если Стр.ТипОперации = "Логистика" Или Стр.ТипОперации = "логистика" Или Стр.ТипОперации = "Коррекция логистики" ИЛи Стр.ТипОперации = "Логистика сторно" Тогда // письмерова 21.06.2024 BSLR-3602
НайтиСтроки = ТаблицаТоваровБезУслуг.НайтиСтроки(Новый Структура("Идентификатор",Стр.Идентификатор));
КомиссияКПереносу = Стр.Комиссия; // письмерова 24.11.2023 BSLR-2814
Если НайтиСтроки.Количество() Тогда
Для Каждого Ст из НайтиСтроки Цикл // письмерова 15.08.2024 BSLR-3796
Если Ст.ТипОперации = "Логистика" Или Ст.ТипОперации = "логистика" Или Ст.ТипОперации = "Коррекция логистики" ИЛи Ст.ТипОперации = "Логистика сторно" Тогда // письмерова 21.06.2024 BSLR-3602
Продолжить;
КонецЕсли;
Если КомиссияКПереносу = 0 ТОгда // дважды может вычисть
Продолжить;
КонецЕсли;
Если Ст.ТипОперации = "Возврат" или Ст.ТипОперации = "возврат" Тогда // меняем знаки // письмерова 13.03.2024 BSLR-3355
Иначе
Если Ст.СуммаКВыплате < Стр.Комиссия Тогда
Продолжить;
Иначе
Ст.СуммаКВыплате = Ст.СуммаКВыплате - Стр.Комиссия;
КомиссияКПереносу = 0;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
МассивДляУдаления.Добавить(Стр);
КонецЕсли;
КонецЦикла;
// удаляем строки с логистикой
Для Каждого Эл Из МассивДляУдаления Цикл
ТаблицаТоваровБезУслуг.Удалить(Эл);
КонецЦикла;
// BSLR-3745 --
// цену нужно пересчитать
Для Каждого Стр из ТаблицаТоваровБезУслуг Цикл
Стр.Цена = Стр.Сумма/?(Стр.Количество=0,1,Стр.Количество);
КонецЦикла;
// письмерова 04.12.2023 BSLR-2814 - распределить суммы комиссий для схождения с данными первичных документов
Если ЭтоУСН Тогда
Если СтруктураУслуг <> Неопределено Тогда
СуммаКРаспределению = СтруктураУслуг.ВозмещениеИздержекПоПеревозке + СтруктураУслуг.СуммаУслугХранения + СтруктураУслуг.УслугиПоДоставке
+ СтруктураУслуг.СуммаКорректировка; // письмерова 30.04.2025 BSLR-4558;
Если СуммаКРаспределению <> 0 Тогда // письмерова 20.12.2023 BSLR-2959
ЕстьОшибкиРаспределения = Ложь;
СтавкаНДСВознагражденияЗначение = 20;
Отбор = новый Структура;
Отбор.Вставить("ТипОперации","Продажа");
ТЗПродажи = ТаблицаТоваровБезУслуг.Скопировать(Отбор);
МассивКоэффициентов = ТЗПродажи.ВыгрузитьКолонку("Сумма");
РезультатРаспределения = топ_ОбщийВызовСервера.РаспределитьПропорционально(СуммаКРаспределению, МассивКоэффициентов);
Если Не ТипЗнч(РезультатРаспределения) = Тип("Массив") или
Не РезультатРаспределения.Количество() = МассивКоэффициентов.Количество() Тогда
Сообщить("По документу не удалось распредилить сумму услуг хранения. Проверьте сумму комиссии!");
ЕстьОшибкиРаспределения = Истина;
КонецЕсли;
сч = 0;
Для Каждого строкаТЗ из ТаблицаТоваровБезУслуг Цикл
//распредилим только по продажам
если не ЕстьОшибкиРаспределения и строкаТЗ.ТипОперации = "Продажа" тогда
строкаТЗ.Комиссия = строкаТЗ.Комиссия + РезультатРаспределения[сч];
сч = сч +1;
//пересчитаем НДС комиссии
строкаТЗ.НДСКомиссии = строкаТЗ.Комиссия * СтавкаНДСВознагражденияЗначение / (100 + СтавкаНДСВознагражденияЗначение);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
// письмерова 26.01.2024 BSLR-3095 - убрать из загрузки по выкупа сторно продаж и сторно возврата
Если ЭтоВыкупы Тогда
Для Каждого Стр из ТаблицаТоваровБезУслуг Цикл
Если Стр.ОбоснованиеДляОплаты = "Сторно продаж" Или Стр.ОбоснованиеДляОплаты = "Сторно возврата" Тогда
ТаблицаТоваровБезУслуг.Удалить(Стр);
КонецЕсли;
КонецЦикла;
// письмерова 19.03.2024 BSLR-3355 SRID - сворачиваем только для выкупов
// BSLR-3745 ++
//ТаблицаТоваровБезУслуг.Свернуть("RID, site_country, Артикул, Бренд, ИД_Заказ, ИД_Этикетки_Заказа, Идентификатор, Наименование, НомерОперации, НомерОтправления, ТипОперации, НомерСтроки, Размер,
// |ШтрихКод, Цена, ОбоснованиеДляОплаты, КодНоменклатуры", "Количество, Комиссия, НДС, НДСКомиссии, Сумма, СуммаКВыплате, Доплаты, Штрафы,SRID"); // письмерова 09.10.2023 BSLR-2677
//КонецЕсли; // письмерова 19.04.2024 BSLR-3481
#КонецОбласти
Иначе // письмерова 19.03.2024 BSLR-3355 SRID - сворачиваем только для выкупов
ТаблицаТоваровБезУслуг.Свернуть("RID, SRID, site_country, Артикул, Бренд, ИД_Заказ, ИД_Этикетки_Заказа, Идентификатор, Наименование, НомерОперации, НомерОтправления, ТипОперации, НомерСтроки, Размер,
|ШтрихКод, Цена, ОбоснованиеДляОплаты, КодНоменклатуры, ПродажаЮЛ", "Количество, Комиссия, НДС, НДСКомиссии, Сумма, СуммаКВыплате, Доплаты, Штрафы,КомпенсацияЛояльности"); // BSLR-4868
КонецЕсли; // BSLR-4895
// BSLR-3745 --
// письмерова 15.03.2024 BSLR-3287
// обработка ЧКБ, Авансовой оплаты за товар, Компенсация подмененного товара
// свернуть по типу продажа/возврат и по ШК
Если Не ЭтоВыкупы Тогда
МассивДляУдаления = Новый Массив;
//ТабШК = Новый ТаблицаЗначений;
ТабШК = ПолучитьТаблицуЗагрузкиТоваровWB();
Для Каждого Стр Из ТаблицаТоваровБезУслуг Цикл
Если Стр.ОбоснованиеДляОплаты = "Частичная компенсация брака" Тогда // пока только для ЧКБ
//Стр.ОбоснованиеДляОплаты = "Компенсация подмененного товара" Или
// Стр.ОбоснованиеДляОплаты = "Авансовая оплата за товар без движения"
нСтр = ТабШК.Добавить();
ЗаполнитьЗначенияСвойств(нСтр,Стр);
МассивДляУдаления.Добавить(Стр);
КонецЕсли;
// письмерова 10.07.2024 BSLR-3690 - удалить, комиссия учтена при пересчктк услуг
//Если СТр.ОбоснованиеДляОплаты = "Коррекция продаж" ТОгда
// МассивДляУдаления.Добавить(Стр); - BSLR-4102
//КонецЕсли;
КонецЦикла;
Для Каждого Эл из МассивДляУдаления Цикл
ТаблицаТоваровБезУслуг.Удалить(Эл);
КонецЦикла;
ТабШк.Свернуть("RID, site_country, Артикул, Бренд, ИД_Заказ, ИД_Этикетки_Заказа, Идентификатор, Наименование, НомерОперации, НомерОтправления, ТипОперации, Размер,
|ШтрихКод, ОбоснованиеДляОплаты, КодНоменклатуры, ПродажаЮЛ", "Комиссия, НДС, НДСКомиссии, Сумма, СуммаКВыплате, Доплаты, Штрафы,SRID"); // письмерова 09.10.2023 BSLR-2677
// BSLR-4895
Для Каждого Стр Из ТабШк Цикл
нСтр = ТаблицаТоваровБезУслуг.Добавить();
ЗаполнитьЗначенияСвойств(нСтр,Стр);
// письмерова 09.04.2024 BSLR-3448
Если Стр.ТипОперации = "Возврат" Или Стр.ТипОперации = "возврат" Тогда
нСтр.Количество = -1;
нСтр.Цена = -нСтр.Сумма;
Иначе
нСтр.Количество = 1;
нСтр.Цена = нСтр.Сумма;
КонецЕсли;
КонецЦикла;
// письмерова 19.03.2024 BSLR-3355 SRID
МассивДляУдаления = Новый Массив;
Для каждого СТр Из ТаблицаТоваровБезУслуг Цикл
Если Стр.ТипОперации = "Логистика" Или Стр.ТипОперации = "логистика" Тогда // письмерова 20.12.2023 BSLR-2959
НайтиСтроки = ТаблицаТоваровБезУслуг.НайтиСтроки(Новый Структура("SRID",Стр.SRID));
КомиссияКПереносу = Стр.Комиссия; // письмерова 24.11.2023 BSLR-2814
Если НайтиСтроки.Количество() Тогда
Для Каждого Ст из НайтиСтроки Цикл
Если Ст.ТипОперации = "Логистика" Или Ст.ТипОперации = "логистика" Тогда // письмерова 20.12.2023 BSLR-2959, BSLR-3355
Продолжить;
КонецЕсли;
Если КомиссияКПереносу = 0 ТОгда // дважды может вычисть
Продолжить;
КонецЕсли;
//письмерова 13.10.2023 BSLR-2718
Если Ст.ТипОперации = "Возврат" или Ст.ТипОперации = "возврат" Тогда // меняем знаки // письмерова 13.03.2024 BSLR-3355
Ст.Комиссия = Ст.Комиссия - Стр.Комиссия;
КомиссияКПереносу = 0;
Иначе
Ст.Комиссия = Ст.Комиссия + Стр.Комиссия;
КомиссияКПереносу = 0;
КонецЕсли;
КонецЦикла;
КонецЕсли;
МассивДляУдаления.Добавить(Стр);
КонецЕсли;
// письмерова 25.08.2025 BSLR-4868 - компенсация лояльности
Если Стр.ТипОперации = "Компенсация скидки по программе лояльности" Тогда
// письмерова 06.10.2025 BSLR-4934 ++
Если Объект.ЛичныйКабинет.ЗагружатьВыплатыПоМеханикамЛояльностиВУслугу Тогда
НайтиСтроки = ТаблицаТоваровБезУслуг.НайтиСтроки(Новый Структура("SRID",Стр.SRID));
КомпенсацияЛояльности = Стр.КомпенсацияЛояльности; // письмерова 24.11.2023 BSLR-2814
Если НайтиСтроки.Количество() Тогда
Для Каждого Ст из НайтиСтроки Цикл
Если Ст.ТипОперации = "Логистика" Или Ст.ТипОперации = "логистика" ИЛи Ст.ТипОперации = "Компенсация скидки по программе лояльности" Тогда
Продолжить;
КонецЕсли;
Если КомпенсацияЛояльности = 0 ТОгда // дважды может вычисть
Продолжить;
КонецЕсли;
Если Ст.ТипОперации = "Возврат" или Ст.ТипОперации = "возврат" Тогда
// не меняем
Иначе
Ст.Сумма = Ст.Сумма - КомпенсацияЛояльности;
Ст.Цена = Ст.Сумма/?(Ст.Количество = 0, 1, Ст.Количество);
КомпенсацияЛояльности = 0;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли; // BSLR-4934 --
МассивДляУдаления.Добавить(Стр);
КонецЕсли;
// письмерова 06.10.2025 BSLR-4934
Если Стр.ТипОперации = "Стоимость участия в программе лояльности" ИЛИ Стр.ТипОперации = "Сумма удержанная за начисленные баллы программы лояльности" Тогда
МассивДляУдаления.Добавить(Стр);
КонецЕсли;
КонецЦикла;
// удаляем строки с логистикой
Для Каждого Эл Из МассивДляУдаления Цикл
ТаблицаТоваровБезУслуг.Удалить(Эл);
КонецЦикла;
// письмерова 19.03.2024 BSLR-3355 - дораспределение комиссии
Если СтруктураУслуг.СуммаКомиссияВБ <> 0 ТОгда
Если ТаблицаТоваровБезУслуг.Итог("Комиссия") <> СтруктураУслуг.СуммаКомиссияВБ ТОгда
СуммаКРаспределению = СтруктураУслуг.СуммаКомиссияВБ - ТаблицаТоваровБезУслуг.Итог("Комиссия");
Если СуммаКРаспределению <> 0 Тогда
ЕстьОшибкиРаспределения = Ложь;
СтавкаНДСВознагражденияЗначение = 20;
Отбор = новый Структура;
Отбор.Вставить("ТипОперации","Продажа");
ТЗПродажи = ТаблицаТоваровБезУслуг.Скопировать(Отбор);
МассивКоэффициентов = ТЗПродажи.ВыгрузитьКолонку("Сумма");
РезультатРаспределения = топ_ОбщийВызовСервера.РаспределитьПропорционально(СуммаКРаспределению, МассивКоэффициентов);
Если Не ТипЗнч(РезультатРаспределения) = Тип("Массив") или
Не РезультатРаспределения.Количество() = МассивКоэффициентов.Количество() Тогда
Сообщить("По документу не удалось распредилить сумму услуг хранения. Проверьте сумму комиссии!");
ЕстьОшибкиРаспределения = Истина;
КонецЕсли;
сч = 0;
Для Каждого строкаТЗ из ТаблицаТоваровБезУслуг Цикл
//распредилим только по продажам
если не ЕстьОшибкиРаспределения и строкаТЗ.ТипОперации = "Продажа" тогда
строкаТЗ.Комиссия = строкаТЗ.Комиссия + РезультатРаспределения[сч];
сч = сч +1;
//пересчитаем НДС комиссии
строкаТЗ.НДСКомиссии = строкаТЗ.Комиссия * СтавкаНДСВознагражденияЗначение / (100 + СтавкаНДСВознагражденияЗначение);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат ТаблицаТоваровБезУслуг;
КонецФункции
&НаСерверебезконтекста
Функция ЗаголовкиТаблицыWB()
МассивКолонок = Новый Массив;
МассивКолонок.Добавить("№");
МассивКолонок.Добавить("Номер поставки");
МассивКолонок.Добавить("Предмет");
МассивКолонок.Добавить("Код номенклатуры");
МассивКолонок.Добавить("Бренд");
МассивКолонок.Добавить("Артикул поставщика");
МассивКолонок.Добавить("Название");
МассивКолонок.Добавить("Размер");
МассивКолонок.Добавить("Баркод");
МассивКолонок.Добавить("Тип документа");
МассивКолонок.Добавить("Обоснование для оплаты");
МассивКолонок.Добавить("Дата заказа покупателем");
МассивКолонок.Добавить("Дата продажи");
МассивКолонок.Добавить("Кол-во");
МассивКолонок.Добавить("Цена розничная");
МассивКолонок.Добавить("Вайлдберриз реализовал Товар (Пр)");
МассивКолонок.Добавить("Согласованный продуктовый дисконт, %");
МассивКолонок.Добавить("Промокод %");
МассивКолонок.Добавить("Итоговая согласованная скидка");
МассивКолонок.Добавить("Цена розничная с учетом согласованной скидки");
// ++ Бойков BSLR-1961. Новая структура и порядок колонок
МассивКолонок.Добавить("Размер снижения кВВ из-за рейтинга, %");
МассивКолонок.Добавить("Размер снижения кВВ из-за акции, %");
МассивКолонок.Добавить("Скидка постоянного Покупателя (СПП)");
МассивКолонок.Добавить("Размер кВВ, %");
МассивКолонок.Добавить("Размер кВВ без НДС, % Базовый");
МассивКолонок.Добавить("Итоговый кВВ без НДС, %");
МассивКолонок.Добавить("Вознаграждение с продаж до вычета услуг поверенного, без НДС");
МассивКолонок.Добавить("Возмещение за выдачу и возврат товаров на ПВЗ");
МассивКолонок.Добавить("Возмещение издержек по эквайрингу");
МассивКолонок.Добавить("Вознаграждение Вайлдберриз (ВВ), без НДС");
МассивКолонок.Добавить("НДС с Вознаграждения Вайлдберриз");
МассивКолонок.Добавить("К перечислению Продавцу за реализованный Товар");
МассивКолонок.Добавить("Количество доставок");
МассивКолонок.Добавить("Количество возврата");
МассивКолонок.Добавить("Услуги по доставке товара покупателю");
МассивКолонок.Добавить("Общая сумма штрафов");
МассивКолонок.Добавить("Доплаты");
МассивКолонок.Добавить("Виды логистики, штрафов и доплат");
МассивКолонок.Добавить("Стикер МП");
МассивКолонок.Добавить("Наименование банка-эквайера");
МассивКолонок.Добавить("Номер офиса");
МассивКолонок.Добавить("Наименование офиса доставки");
МассивКолонок.Добавить("ИНН партнера");
МассивКолонок.Добавить("Партнер");
МассивКолонок.Добавить("Склад");
МассивКолонок.Добавить("Страна");
МассивКолонок.Добавить("Тип коробов");
МассивКолонок.Добавить("Номер таможенной декларации");
МассивКолонок.Добавить("Код маркировки");
МассивКолонок.Добавить("ШК");
МассивКолонок.Добавить("Rid");
МассивКолонок.Добавить("Srid");
МассивКолонок.Добавить("Возмещение издержек по перевозке");
МассивКолонок.Добавить("Организатор перевозки");
// -- Бойков BSLR-1961
// письмерова 13.06.2023 BSLR-1982
МассивКолонок.Добавить("Обоснование для оплаты");
Возврат МассивКолонок;
КонецФункции
&НаСервере
Процедура ЗаполнитьСтрокуТаблицыТоваровWB(СтрокаПриемник, ТабличныйДокумент, ТекущаяСтрока, НомераКолонокФайла, ЭтоВозврат = Ложь, ЭтоВыкупы = Ложь, ВключитьВСуммуПродажВозмешения = Ложь)
XMLТекущаяСтрока = XMLСтрока(ТекущаяСтрока);
СтрокаПриемник.НомерСтроки = ТекущаяСтрока - 1;
// письмерова 17.04.2024 BSLR-3481
//СтрокаПриемник.site_country = ?(Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.site_country).ТекущаяОбласть.Текст) = "Россия", "RU", "");
Если Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.site_country).ТекущаяОбласть.Текст) = "Россия" Или
Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.site_country).ТекущаяОбласть.Текст) = "RU" Тогда
СтрокаПриемник.site_country = "RU";
Иначе
СтрокаПриемник.site_country = "";
КонецЕсли;
СтрокаПриемник.ОбоснованиеДляОплаты = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ОбоснованиеДляОплаты).ТекущаяОбласть.Текст);
// письмерова 10.07.2024 BSLR-3690 - Коррекция продаж - обнулять количество, корректировка комиссий
//Если СтрокаПриемник.ОбоснованиеДляОплаты = "Коррекция продаж" ТОгда
// СтрокаПриемник.Количество = 0; - BSLR-4102 - перенесено ниже по коду
//КонецЕсли;
Если Объект.ДатаНачала < Дата(2024,4,1) ТОгда // письмерова 26.04.2024 BSLR-3509 - до 01.04.2024 старая схема
Если СтрокаПриемник.ОбоснованиеДляОплаты = "Частичная компенсация брака" или
СтрокаПриемник.ОбоснованиеДляОплаты = "Компенсация подмененного товара" Или
СтрокаПриемник.ОбоснованиеДляОплаты = "Авансовая оплата за товар без движения" Тогда
Если СтрокаПриемник.Количество = 0 Тогда
Если СтрокаПриемник.ТипОперации = "Возврат" Тогда
СтрокаПриемник.Количество = -1;
Иначе
СтрокаПриемник.Количество = 1;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Иначе
// пока ничего не делаем
КонецЕсли;
СтрокаПриемник.Артикул = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Артикул).ТекущаяОбласть.Текст);
СтрокаПриемник.Бренд = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Бренд).ТекущаяОбласть.Текст);
СтрокаПриемник.ИД_Этикетки_Заказа = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ИД_Этикетки_Заказа).ТекущаяОбласть.Текст);
Гр1 = Лев(СтрокаПриемник.ИД_Этикетки_Заказа,1);
Гр2 = Сред(СтрокаПриемник.ИД_Этикетки_Заказа,2,3);
Гр3 = Сред(СтрокаПриемник.ИД_Этикетки_Заказа,5,3);
Гр4 = Прав(СтрокаПриемник.ИД_Этикетки_Заказа,3);
СтрокаПриемник.ИД_Этикетки_Заказа = Гр1 + Символы.НПП + Гр2 + Символы.НПП + Гр3 + Символы.НПП + Гр4;
СтрокаПриемник.Идентификатор = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Идентификатор).ТекущаяОбласть.Текст);
СтрокаПриемник.Комиссия = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Комиссия).ТекущаяОбласть.Текст)
+ Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НДСКомиссии).ТекущаяОбласть.Текст)
+ Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.УслугиПоДоставке).ТекущаяОбласть.Текст);
СтрокаПриемник.НДСКомиссии = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НДСКомиссии).ТекущаяОбласть.Текст);
СтрокаПриемник.Наименование = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Наименование).ТекущаяОбласть.Текст);
// письмерова 05.12.2023 BSLR-2918
СтрокаПриемник.Размер = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Размер).ТекущаяОбласть.Текст);
//Попытка СтрокаПриемник.RID = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.RID).ТекущаяОбласть.Текст);Исключение КонецПопытки; // BSLR-3859
СтрокаПриемник.Цена = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Цена).ТекущаяОбласть.Текст);
//СтрокаПриемник.Сумма = ?(ЭтоВыкупы, Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.КВыплате).ТекущаяОбласть.Текст), СтрокаПриемник.Цена * СтрокаПриемник.Количество);
СтрокаПриемник.Сумма = СтрокаПриемник.Цена * СтрокаПриемник.Количество;
Попытка
СтрокаПриемник.РазовоеНачисление = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.РазовоеНачисление).ТекущаяОбласть.Текст);
Исключение
КонецПопытки;
СтрокаПриемник.ШтрихКод = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Штрихкод).ТекущаяОбласть.Текст);
СтрокаПриемник.Штрафы = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Штрафы).ТекущаяОбласть.Текст);
СтрокаПриемник.Доплаты = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Доплата).ТекущаяОбласть.Текст);
// BSLR-4102 - перенесено ниже по коду
Если СтрокаПриемник.ОбоснованиеДляОплаты = "Коррекция продаж" ИЛи СтрокаПриемник.ОбоснованиеДляОплаты = "Коррекция возвратов" ТОгда // BSLR-4444
СтрокаПриемник.Количество = 0;
КонецЕсли;
// письмерова 10.10.2023 BSLR-2677
Если СтрокаПриемник.ТипОперации = "Возврат" Тогда
СтрокаПриемник.СуммаКВыплате = -1*Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СуммаКВыплате).ТекущаяОбласть.Текст);
// письмерова 23.01.2024 BSLR-3095
Если ЭтоВыкупы Тогда
СтрокаПриемник.Комиссия = -1*СтрокаПриемник.Комиссия;
СтрокаПриемник.НДСКомиссии = -1*СтрокаПриемник.НДСКомиссии;
КонецЕсли;
Иначе
СтрокаПриемник.СуммаКВыплате = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СуммаКВыплате).ТекущаяОбласть.Текст);
КонецЕсли;
// ++ Бойков BSLR-2048
ТекстЯчейкиВозмещение = ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ВозмещениеВыдачаВозврат).ТекущаяОбласть.Текст;
Если ЗначениеЗаполнено(ТекстЯчейкиВозмещение) Тогда
СтрокаПриемник.ВозмещениеВыдачаВозврат = Число(ТекстЯчейкиВозмещение);
Иначе
СтрокаПриемник.ВозмещениеВыдачаВозврат = 0;
КонецЕсли;
// -- Бойков BSLR-2048
// письмерова 14.10.2024 BSLR-4000
Попытка ТипПлатежаЗаЭквайринг = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ТипПлатежаЗаЭквайринг).ТекущаяОбласть.Текст);
Исключение ТипПлатежаЗаЭквайринг = ""; КонецПопытки;
Если ТипПлатежаЗаЭквайринг = "Комиссия за организацию платежа с НДС" Тогда
СтрокаПриемник.Эквайринг = 0;
Иначе
СтрокаПриемник.Эквайринг = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Эквайринг).ТекущаяОбласть.Текст);
КонецЕсли;
СтрокаПриемник.УслугиПоДоставке = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.УслугиПоДоставке).ТекущаяОбласть.Текст);
Если СтрокаПриемник.ОбоснованиеДляОплаты = "Частичная компенсация брака" или
СтрокаПриемник.ОбоснованиеДляОплаты = "Возмещение издержек по перевозке" Или СтрокаПриемник.ОбоснованиеДляОплаты = "Возмещение издержек по перевозке/по складским операциям с товаром" Или // письмерова 05.04.2024 BSLR-3440
// письмерова 15.03.2024 BSLR-3287
СтрокаПриемник.ОбоснованиеДляОплаты = "Компенсация подмененного товара" Или
СтрокаПриемник.ОбоснованиеДляОплаты = "Корректировка" Или // BSLR-4558
СтрокаПриемник.ОбоснованиеДляОплаты = "Авансовая оплата за товар без движения" Тогда
Если СтрокаПриемник.ОбоснованиеДляОплаты = "Возмещение издержек по перевозке"
Или СтрокаПриемник.ОбоснованиеДляОплаты = "Возмещение издержек по перевозке/по складским операциям с товаром" Тогда // письмерова 05.04.2024 BSLR-3440
СтрокаПриемник.Цена = 0;
СтрокаПриемник.Количество = 0;
//письмерова 14.03.2024 BSLR-3357
Если НЕ ВключитьВСуммуПродажВозмешения Тогда
// обнулить сумму к выплате
СтрокаПриемник.СуммаКВыплате = 0;
КонецЕсли;
// письмерова 17.04.2024 BSLR-3481 - перенос комиссии, BSLR-3690
//Если СтрокаПриемник.Комиссия = 0 ТОгда
// Попытка СтрокаПриемник.Комиссия = - Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ВозмещениеИздержек).ТекущаяОбласть.Текст);
// Исключение КонецПопытки;
//КонецЕсли;
Если Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.ТипДокумента).ТекущаяОбласть.Текст) = "Возврат" Или
Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.ТипДокумента).ТекущаяОбласть.Текст) = "возврат" ТОгда
Попытка СтрокаПриемник.ВозмещениеИздержек = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ВозмещениеИздержек).ТекущаяОбласть.Текст);
Исключение СтрокаПриемник.ВозмещениеИздержек = 0; КонецПопытки;
Иначе
Попытка СтрокаПриемник.ВозмещениеИздержек = - Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ВозмещениеИздержек).ТекущаяОбласть.Текст);
Исключение СтрокаПриемник.ВозмещениеИздержек = 0; КонецПопытки;
КонецЕсли;
СтрокаПриемник.ТипОперации = СтрокаПриемник.ОбоснованиеДляОплаты;
СтрокаПриемник.ОбоснованиеДляОплаты = "";
КонецЕсли;
// письмерова 21.12.2023 BSLR-2959
Если СтрокаПриемник.СуммаКВыплате <> 0 и СтрокаПриемник.Сумма = 0 Тогда
СтрокаПриемник.Сумма = СтрокаПриемник.СуммаКВыплате;
КонецЕсли;
// письмерова 26.04.2024 BSLR-3509 // BSLR-4558
Если Объект.ДатаНачала >= Дата(2024,4,1) И (СтрокаПриемник.ОбоснованиеДляОплаты = "Компенсация подмененного товара" Или СтрокаПриемник.ОбоснованиеДляОплаты = "Корректировка") Тогда
СтрокаПриемник.Сумма = СтрокаПриемник.СуммаКВыплате;
СтрокаПриемник.ТипОперации = СтрокаПриемник.ОбоснованиеДляОплаты;
КонецЕсли;
Иначе // очистить поле ОбоснованиеДляОплаты - для свертки
// письмерова 26.04.2024 BSLR-3509
Если Объект.ДатаНачала >= Дата(2024,4,1) ТОгда
// письмерова 14.06.2024 BSLR-3587
Если СтрокаПриемник.ОбоснованиеДляОплаты = "Сторно возврата" Или СтрокаПриемник.ОбоснованиеДляОплаты = "Сторно возвратов" Тогда
СтрокаПриемник.Сумма = -1 * СтрокаПриемник.Сумма;
КонецЕсли;
Если СтрокаПриемник.ОбоснованиеДляОплаты = "Компенсация потерянного товара" или
СтрокаПриемник.ОбоснованиеДляОплаты = "Компенсация брака" Или
СтрокаПриемник.ОбоснованиеДляОплаты = "Компенсация ущерба" Или // письмерова 03.07.2024 BSLR-3662
СтрокаПриемник.ОбоснованиеДляОплаты = "Добровольная компенсация при возврате" Или // письмерова 03.07.2024 BSLR-3662
СтрокаПриемник.ОбоснованиеДляОплаты = "Компенсация подмененного товара" Тогда
СтрокаПриемник.Сумма = СтрокаПриемник.СуммаКВыплате;
СтрокаПриемник.ТипОперации = СтрокаПриемник.ОбоснованиеДляОплаты;
Иначе
Если СтрокаПриемник.ОбоснованиеДляОплаты = "Сторно продаж" Или СтрокаПриемник.ОбоснованиеДляОплаты = "Сторно возврата"
Или СтрокаПриемник.ОбоснованиеДляОплаты = "Коррекция продаж" // письмерова 10.07.2024 BSLR-3690
Или СтрокаПриемник.ОбоснованиеДляОплаты = "Коррекция возвратов" Тогда // BSLR-4444
// оставляем все как есть
Иначе
СтрокаПриемник.ОбоснованиеДляОплаты = "";
КонецЕсли;
КонецЕсли;
Иначе
// письмерова 26.01.2024 BSLR-3095 - убрать из загрузки по выкупа сторно продаж и сторно возврата
Если СтрокаПриемник.ОбоснованиеДляОплаты = "Сторно продаж" Или СтрокаПриемник.ОбоснованиеДляОплаты = "Сторно возврата" Тогда
// оставляем все как есть
Иначе
СтрокаПриемник.ОбоснованиеДляОплаты = "";
КонецЕсли;
КонецЕсли;
КонецЕсли;
// письмерова 09.10.2023 BSLR-2677
//Если ЭтоВыкупы Тогда - письмерова 19.03.2024 BSLR-3355
СтрокаПриемник.SRID = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.SRID).ТекущаяОбласть.Текст);
//КонецЕсли;
// письмерова 17.11.2023 BSLR-2814
СтрокаПриемник.СтранаПродажи = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СтранаПродажи).ТекущаяОбласть.Текст);
// письмерова 20.03.2024 BSLR-2959 - черз попытку, т.к. в старых форматах нет таких полей
Попытка СтрокаПриемник.Хранение = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Хранение).ТекущаяОбласть.Текст);Исключение КонецПопытки;
Попытка СтрокаПриемник.Удержания = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Удержания).ТекущаяОбласть.Текст);Исключение КонецПопытки;
Попытка СтрокаПриемник.ПлатнаяПриемка = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ПлатнаяПриемка).ТекущаяОбласть.Текст);Исключение КонецПопытки;
// письмерова 19.04.2024 BSLR-3481 - обнуление комиссии
Если СтрокаПриемник.ОбоснованиеДляОплаты = "Логистика" или СтрокаПриемник.ОбоснованиеДляОплаты = "логистика" или СтрокаПриемник.ОбоснованиеДляОплаты = "Хранение" ТОгда
СтрокаПриемник.Комиссия = 0;
СтрокаПриемник.НДСКомиссии = 0;
КонецЕсли;
Попытка СтрокаПриемник.КодНоменклатуры = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.КодНоменклатуры).ТекущаяОбласть.Текст);
Исключение СтрокаПриемник.КодНоменклатуры = 0; КонецПопытки;
// письмерова 26.04.2024 BSLR-3509
Попытка СтрокаПриемник.ПроцентЭквайринга = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ПроцентЭквайринга).ТекущаяОбласть.Текст);Исключение КонецПопытки;
// письмерова 25.08.2025 BSLR-4868
Попытка СтрокаПриемник.КомпенсацияЛояльности = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.КомпенсацияЛояльности).ТекущаяОбласть.Текст);Исключение КонецПопытки;
// BSLR-4934 ++
Если ЭтоВозврат ТОгда
Попытка СтрокаПриемник.КомпенсацияЛояльности = -1* Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.КомпенсацияЛояльности).ТекущаяОбласть.Текст);Исключение КонецПопытки;
КонецЕсли; // BSLR-4934 --
// BSLR-4895
Попытка СтрокаПриемник.ПродажаЮЛ = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ПродажаЮЛ).ТекущаяОбласть.Текст);Исключение КонецПопытки;
// письмерова 06.10.2025 BSLR-4934
Попытка СтрокаПриемник.СтоимостьУчастияЛояльности = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СтоимостьУчастияЛояльности).ТекущаяОбласть.Текст);Исключение КонецПопытки;
Если ЭтоВозврат ТОгда
Попытка СтрокаПриемник.СтоимостьУчастияЛояльности = -1* Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СтоимостьУчастияЛояльности).ТекущаяОбласть.Текст);Исключение КонецПопытки;
КонецЕсли;
Попытка СтрокаПриемник.УдержанияЗаБаллыЛояльности = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.УдержанияЗаБаллыЛояльности).ТекущаяОбласть.Текст);Исключение КонецПопытки;
Если ЭтоВозврат ТОгда
Попытка СтрокаПриемник.УдержанияЗаБаллыЛояльности = -1 *Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.УдержанияЗаБаллыЛояльности).ТекущаяОбласть.Текст);Исключение КонецПопытки;
КонецЕсли; // BSLR-4934 --
КонецПроцедуры
&НаСерверебезконтекста
Функция СоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков)
Результат = Новый Структура;
Результат.Вставить("site_country", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Страна"));
Результат.Вставить("Артикул", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Артикул поставщика"));
Результат.Вставить("Бренд", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Бренд"));
Результат.Вставить("ДатаЗаказа", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Дата заказа покупателем"));
Результат.Вставить("ДатаПродажи", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Дата продажи"));
Результат.Вставить("ИД_Заказ", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Srid"));
Результат.Вставить("ИД_Этикетки_Заказа", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Стикер МП"));
Результат.Вставить("Идентификатор", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Код номенклатуры"));
Результат.Вставить("КоличествоПродано", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Кол-во"));
Результат.Вставить("КоличествоВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Количество возврата"));
Результат.Вставить("Комиссия", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Вознаграждение Вайлдберриз (ВВ), без НДС"));
Результат.Вставить("НДСКомиссии", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "НДС с Вознаграждения Вайлдберриз"));
Результат.Вставить("Наименование", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Предмет"));
Результат.Вставить("RID", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Rid"));
Результат.Вставить("Размер", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Размер"));
Результат.Вставить("ТипДокумента", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Тип документа"));
Результат.Вставить("ТипОперации", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Обоснование для оплаты"));
Результат.Вставить("Цена", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Вайлдберриз реализовал Товар (Пр)"));
Результат.Вставить("ШтрихКод", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Баркод"));
Результат.Вставить("РаходыПоЭквайрингу", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Возмещение издержек по эквайрингу"));
Результат.Вставить("ВозмещениеЗаВыдачу", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Возмещение за выдачу и возврат товаров на ПВЗ"));
Результат.Вставить("Доплата", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Доплаты"));
Результат.Вставить("Штрафы", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Общая сумма штрафов"));
Результат.Вставить("УслугиПоДоставке", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Услуги по доставке товара покупателю"));
Результат.Вставить("ШК_ИД", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Rid"));
Результат.Вставить("СуммаКВыплате", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "К перечислению Продавцу за реализованный Товар"));
Результат.Вставить("ВозмещениеВыдачаВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Возмещение за выдачу и возврат товаров на ПВЗ"));
Результат.Вставить("Эквайринг", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Возмещение издержек по эквайрингу"));
Результат.Вставить("ОбоснованиеДляОплаты", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Обоснование для оплаты"));
Результат.Вставить("SRID", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Srid"));
Результат.Вставить("СтранаПродажи", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Страна"));
Результат.Вставить("Хранение", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Хранение"));
Результат.Вставить("Удержания", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Удержания"));
Результат.Вставить("ПлатнаяПриемка", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Платная приемка"));
// письмерова 22.12.2025 BSLR-5183 ++
Если Не ЗначениеЗаполнено(Результат.ПлатнаяПриемка) Тогда
Результат.Вставить("ПлатнаяПриемка",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Операции при приёмке"));
КонецЕсли;
Если Не ЗначениеЗаполнено(Результат.ПлатнаяПриемка) Тогда
Результат.Вставить("ПлатнаяПриемка",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Операции при приемке"));
КонецЕсли;
Если Не ЗначениеЗаполнено(Результат.ПлатнаяПриемка) Тогда
Результат.Вставить("ПлатнаяПриемка",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Операции на приемке"));
КонецЕсли; // BSLR-5183 --
Результат.Вставить("ВозмещениеИздержек", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Возмещение издержек по перевозке"));
Если Не ЗначениеЗаполнено(Результат.ВозмещениеИздержек) Тогда
Результат.Вставить("ВозмещениеИздержек",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Возмещение издержек по перевозке/по складским операциям с товаром"));
КонецЕсли;
Результат.Вставить("КодНоменклатуры", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Код номенклатуры"));
Результат.Вставить("ПроцентЭквайринга", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Процент возмещения издержек по эквайрингу"));
Если Не ЗначениеЗаполнено(Результат.ПроцентЭквайринга) Тогда
Результат.Вставить("ПроцентЭквайринга",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Размер комиссии за эквайринг без НДС, %"));
КонецЕсли;
Если Не ЗначениеЗаполнено(Результат.ПроцентЭквайринга) Тогда
Результат.Вставить("ПроцентЭквайринга",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Размер комиссии за эквайринг, %"));
КонецЕсли;
Если Не ЗначениеЗаполнено(Результат.Эквайринг) Тогда
Результат.Вставить("Эквайринг", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Эквайринг/Комиссии за организацию платежей"));
КонецЕсли;
Если Не ЗначениеЗаполнено(Результат.Эквайринг) Тогда
Результат.Вставить("Эквайринг", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Эквайринг/Комиссия за организацию платежей"));
КонецЕсли;
Если Не ЗначениеЗаполнено(Результат.ПроцентЭквайринга) Тогда
Результат.Вставить("ПроцентЭквайринга",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Размер комиссии за эквайринг/Комиссии за организацию платежей, %"));
КонецЕсли;
Если Не ЗначениеЗаполнено(Результат.ПроцентЭквайринга) Тогда
Результат.Вставить("ПроцентЭквайринга",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Размер комиссии за эквайринг/Комиссия за организацию платежей, %"));
КонецЕсли;
Результат.Вставить("ТипПлатежаЗаЭквайринг",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Тип платежа за Эквайринг/Комиссии за организацию платежей"));
Если Не ЗначениеЗаполнено(Результат.ТипПлатежаЗаЭквайринг) Тогда
Результат.Вставить("ТипПлатежаЗаЭквайринг",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Тип платежа за эквайринг/Комиссии за организацию платежей"));
КонецЕсли;
//Крупа BSLR-5434 ++
// с 30.03.2026 больше нет отдельной комиссии; перешли на механизм прямого перевыставления. названия столбцов меняются.
Если Не ЗначениеЗаполнено(Результат.Эквайринг) Тогда
Результат.Вставить("Эквайринг", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Компенсация платёжных услуг/Комиссия за интеграцию платёжных сервисов"));
КонецЕсли;
Если Не ЗначениеЗаполнено(Результат.ПроцентЭквайринга) Тогда
Результат.Вставить("ПроцентЭквайринга",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Размер компенсации платёжных услуг/Комиссии за интеграцию платёжных сервисов, %"));
КонецЕсли;
Если Не ЗначениеЗаполнено(Результат.ТипПлатежаЗаЭквайринг) Тогда
Результат.Вставить("ТипПлатежаЗаЭквайринг",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Тип платежа: компенсация платёжных услуг/комиссия за интеграцию платёжных сервисов"));
КонецЕсли;
Если Не ЗначениеЗаполнено(Результат.ТипПлатежаЗаЭквайринг) Тогда
Результат.Вставить("ТипПлатежаЗаЭквайринг",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Тип платежа: компенсация платёжных услуг/Комиссия за интеграцию платёжных сервисов"));
КонецЕсли;
//Крупа BSLR-5434 --
// письмерова 28.05.2025 BSLR-4640
Если Не ЗначениеЗаполнено(Результат.Доплата) Тогда
Результат.Вставить("Доплата",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Корректировка Вознаграждения Вайлдберриз (ВВ)"));
КонецЕсли;
// письмерова 25.08.2025 BSLR-4868
Результат.Вставить("КомпенсацияЛояльности",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Компенсация скидки по программе лояльности"));
// письмерова 03.10.2025 BSLR-4895
Результат.Вставить("ПродажаЮЛ",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Признак продажи юридическому лицу"));
// письмерова 06.10.2025 BSLR-4934
Результат.Вставить("СтоимостьУчастияЛояльности",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Стоимость участия в программе лояльности"));
Результат.Вставить("УдержанияЗаБаллыЛояльности",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Сумма удержанная за начисленные баллы программы лояльности"));
// письмерова 30.04.2026 BSLR-5533
Если Не ЗначениеЗаполнено(Результат.УдержанияЗаБаллыЛояльности) Тогда
Результат.Вставить("УдержанияЗаБаллыЛояльности",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Сумма баллов, удержанных по программе лояльности"));
КонецЕсли;
Результат.Вставить("РазовоеНачисление",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Разовое изменение срока перечисления денежных средств"));
Возврат Результат;
КонецФункции
&НаСерверебезконтекста
Функция УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, СтрокаПоиска)
Для сч = 1 по 80 Цикл // BSLR-4934
Если СтрокаПоиска = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(СтрокаЗаголовков) + "C" + сч).ТекущаяОбласть.Текст) Тогда
Возврат сч;
Прервать;
КонецЕсли;
КонецЦикла;
КонецФункции
&НаСерверебезконтекста
Функция ПолучитьТаблицуЗагрузкиТоваровWB() Экспорт
КвалификаторыСтроки = Новый КвалификаторыСтроки(100);
КвалификаторыЧисла = Новый КвалификаторыЧисла(18,5); // BSLR-4934
ТипСтроки = Новый ОписаниеТипов("Строка" ,,,, КвалификаторыСтроки);
ТипЧисла = Новый ОписаниеТипов("Число" ,,, КвалификаторыЧисла );
СписокТоваров = Новый ТаблицаЗначений;
СписокТоваров.Колонки.Добавить("НомерСтроки", ТипЧисла);
СписокТоваров.Колонки.Добавить("site_country", ТипСтроки);
СписокТоваров.Колонки.Добавить("Артикул", ТипСтроки);
СписокТоваров.Колонки.Добавить("Бренд", ТипСтроки);
СписокТоваров.Колонки.Добавить("ИД_Заказ", ТипСтроки);
СписокТоваров.Колонки.Добавить("ИД_Этикетки_Заказа", ТипСтроки);
СписокТоваров.Колонки.Добавить("Идентификатор", ТипСтроки);
СписокТоваров.Колонки.Добавить("Количество", ТипЧисла);
СписокТоваров.Колонки.Добавить("Комиссия", ТипЧисла);
СписокТоваров.Колонки.Добавить("НДС", ТипЧисла);
СписокТоваров.Колонки.Добавить("НДСКомиссии", ТипЧисла);
СписокТоваров.Колонки.Добавить("Наименование", ТипСтроки);
СписокТоваров.Колонки.Добавить("RID", ТипСтроки);
СписокТоваров.Колонки.Добавить("НомерОперации", ТипСтроки);
СписокТоваров.Колонки.Добавить("НомерОтправления", ТипСтроки);
СписокТоваров.Колонки.Добавить("Размер", ТипСтроки);
СписокТоваров.Колонки.Добавить("Сумма", ТипЧисла);
СписокТоваров.Колонки.Добавить("ТипОперации", ТипСтроки);
СписокТоваров.Колонки.Добавить("Цена", ТипЧисла);
СписокТоваров.Колонки.Добавить("ШтрихКод", ТипСтроки);
СписокТоваров.Колонки.Добавить("СуммаКВыплате", ТипЧисла);
СписокТоваров.Колонки.Добавить("Доплаты", ТипЧисла);
СписокТоваров.Колонки.Добавить("Штрафы", ТипЧисла);
СписокТоваров.Колонки.Добавить("ВозмещениеВыдачаВозврат", ТипЧисла);
СписокТоваров.Колонки.Добавить("Эквайринг", ТипЧисла);
СписокТоваров.Колонки.Добавить("УслугиПоДоставке", ТипЧисла);
// письмерова 13.06.2023 BSLR-1982
СписокТоваров.Колонки.Добавить("ОбоснованиеДляОплаты", Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(250)));
// письмерова 09.10.2023 BSLR-2677
СписокТоваров.Колонки.Добавить("SRID", ТипСтроки);
// письмерова 17.11.2023 BSLR-2814
СписокТоваров.Колонки.Добавить("ВозмещениеЗаВыдачу", ТипЧисла);
СписокТоваров.Колонки.Добавить("СтранаПродажи", ТипСтроки);
// письмерова 20.03.2024 BSLR-2959
СписокТоваров.Колонки.Добавить("Хранение", ТипЧисла);
СписокТоваров.Колонки.Добавить("Удержания", ТипЧисла);
СписокТоваров.Колонки.Добавить("ПлатнаяПриемка", ТипЧисла);
// письмерова 19.04.2024 BSLR-3481
СписокТоваров.Колонки.Добавить("ВозмещениеИздержек", ТипЧисла);
СписокТоваров.Колонки.Добавить("КодНоменклатуры", ТипЧисла);
// письмерова 26.04.2024 BSLR-3509
СписокТоваров.Колонки.Добавить("ПроцентЭквайринга", ТипЧисла);
// письмерова 25.08.2025 BSLR-4868
СписокТоваров.Колонки.Добавить("КомпенсацияЛояльности", ТипЧисла);
// письмерова 03.10.2025 BSLR-4895
СписокТоваров.Колонки.Добавить("ПродажаЮЛ", Новый ОписаниеТипов("Булево")); // продаж юл
// письмерова 06.10.2025 BSLR-4934
СписокТоваров.Колонки.Добавить("СтоимостьУчастияЛояльности", ТипЧисла);
СписокТоваров.Колонки.Добавить("УдержанияЗаБаллыЛояльности", ТипЧисла);
СписокТоваров.Колонки.Добавить("РазовоеНачисление", ТипЧисла);
Возврат СписокТоваров;
КонецФункции
// письмерова 20.12.2023 BSLR-2959
&НаСерверебезконтекста
Функция ЗаголовкиТаблицыWB_NEW(После29012024 = Ложь)
МассивКолонок = Новый Массив;
МассивКолонок.Добавить("№");
Если После29012024 Тогда // письмерова 04.03.2024 BSLR-3329
МассивКолонок.Добавить("Номер поставки");
КонецЕсли;
МассивКолонок.Добавить("Предмет");
МассивКолонок.Добавить("Код номенклатуры");
МассивКолонок.Добавить("Бренд");
МассивКолонок.Добавить("Артикул поставщика");
МассивКолонок.Добавить("Название");
МассивКолонок.Добавить("Размер");
МассивКолонок.Добавить("Баркод");
МассивКолонок.Добавить("Тип документа");
МассивКолонок.Добавить("Обоснование для оплаты");
МассивКолонок.Добавить("Дата заказа покупателем");
МассивКолонок.Добавить("Дата продажи");
МассивКолонок.Добавить("Кол-во");
МассивКолонок.Добавить("Цена розничная");
МассивКолонок.Добавить("Вайлдберриз реализовал Товар (Пр)");
МассивКолонок.Добавить("Согласованный продуктовый дисконт, %");
Если После29012024 Тогда // письмерова 04.03.2024 BSLR-3329
МассивКолонок.Добавить("Промокод %");
КонецЕсли;
МассивКолонок.Добавить("Итоговая согласованная скидка, %");
МассивКолонок.Добавить("Цена розничная с учетом согласованной скидки");
Если После29012024 Тогда // письмерова 04.03.2024 BSLR-3329
МассивКолонок.Добавить("Размер снижения кВВ из-за рейтинга, %");
МассивКолонок.Добавить("Размер снижения кВВ из-за акции, %");
КонецЕсли;
МассивКолонок.Добавить("Скидка постоянного Покупателя (СПП), %");
МассивКолонок.Добавить("Размер кВВ, %");
МассивКолонок.Добавить("Размер кВВ без НДС, % Базовый");
МассивКолонок.Добавить("Итоговый кВВ без НДС, %");
МассивКолонок.Добавить("Вознаграждение с продаж до вычета услуг поверенного, без НДС");
МассивКолонок.Добавить("Возмещение за выдачу и возврат товаров на ПВЗ");
МассивКолонок.Добавить("Возмещение издержек по эквайрингу");
МассивКолонок.Добавить("Вознаграждение Вайлдберриз (ВВ), без НДС");
МассивКолонок.Добавить("НДС с Вознаграждения Вайлдберриз");
МассивКолонок.Добавить("К перечислению Продавцу за реализованный Товар");
МассивКолонок.Добавить("Количество доставок");
МассивКолонок.Добавить("Количество возврата");
МассивКолонок.Добавить("Услуги по доставке товара покупателю");
МассивКолонок.Добавить("Общая сумма штрафов");
МассивКолонок.Добавить("Доплаты");
МассивКолонок.Добавить("Виды логистики, штрафов и доплат");
МассивКолонок.Добавить("Стикер МП");
Если После29012024 Тогда // письмерова 04.03.2024 BSLR-3329
МассивКолонок.Добавить("Наименование банка-эквайера");
КонецЕсли;
МассивКолонок.Добавить("Номер офиса");
Если После29012024 Тогда // письмерова 04.03.2024 BSLR-3329
МассивКолонок.Добавить("Наименование офиса доставки");
МассивКолонок.Добавить("ИНН партнера");
МассивКолонок.Добавить("Партнер");
КонецЕсли;
МассивКолонок.Добавить("Склад");
МассивКолонок.Добавить("Страна");
Если После29012024 Тогда // письмерова 04.03.2024 BSLR-3329
МассивКолонок.Добавить("Тип коробов");
МассивКолонок.Добавить("Номер таможенной декларации");
МассивКолонок.Добавить("Код маркировки");
КонецЕсли;
МассивКолонок.Добавить("ШК");
МассивКолонок.Добавить("Rid");
МассивКолонок.Добавить("Srid");
МассивКолонок.Добавить("Возмещение издержек по перевозке");
МассивКолонок.Добавить("Организатор перевозки");
Если Не После29012024 Тогда // письмерова 04.03.2024 BSLR-3329
МассивКолонок.Добавить("Код маркировки");
КонецЕсли;
МассивКолонок.Добавить("Хранение");
МассивКолонок.Добавить("Удержания");
МассивКолонок.Добавить("Платная приемка");
Возврат МассивКолонок;
КонецФункции
// пиьмерова 27.11.2024 BSLR-4102
&НаСервере
Функция ОбработатьДанныеПоВыкупамВБ(ТаблицаВыкупов)
// разделим таблицу на две
// в одной чистые продажи, в другой все остальное
// сумма к выплате = СуммаКВыплате - УслугиПоДоставке в рамках одного АРТИКУЛА
Запрос = Новый Запрос("ВЫБРАТЬ
| ТЗ.ШтрихКод КАК ШтрихКод,
| ТЗ.Идентификатор КАК Идентификатор,
| ТЗ.Артикул КАК Артикул,
| ТЗ.Количество КАК Количество,
| ТЗ.УслугиПоДоставке КАК УслугиПоДоставке,
| ТЗ.СуммаКВыплате КАК СуммаКВыплате,
| ТЗ.ТипОперации КАК ТипОперации,
| ТЗ.Размер КАК Размер,
| ТЗ.ОбоснованиеДляОплаты КАК ОбоснованиеДляОплаты
|ПОМЕСТИТЬ ВТ_Таблица
|ИЗ
| &ТЗ КАК ТЗ
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВЫБОР
| КОГДА ВТ_Таблица.Количество = 0
| ТОГДА """"
| ИНАЧЕ ВТ_Таблица.ШтрихКод
| КОНЕЦ КАК ШтрихКод,
| ВТ_Таблица.Артикул КАК Артикул,
| СУММА(ВЫБОР
// BSLR-4444
| КОГДА ВТ_Таблица.ОбоснованиеДляОплаты = ""Коррекция продаж"" ИЛИ ВТ_Таблица.ОбоснованиеДляОплаты = ""Коррекция возвратов""
| ТОГДА 0
| ИНАЧЕ ВТ_Таблица.Количество
| КОНЕЦ) КАК Количество,
| СУММА(ВТ_Таблица.УслугиПоДоставке) КАК УслугиПоДоставке,
| СУММА(ВТ_Таблица.СуммаКВыплате) КАК СуммаКВыплате,
| ВТ_Таблица.ТипОперации КАК ТипОперации,
| ВЫБОР
| КОГДА ВТ_Таблица.Количество = 0
| ТОГДА """"
| ИНАЧЕ ВТ_Таблица.Размер
| КОНЕЦ КАК Размер,
| ВЫБОР
| КОГДА ВТ_Таблица.ОбоснованиеДляОплаты <> """"
| ТОГДА """"
| ИНАЧЕ ВТ_Таблица.ОбоснованиеДляОплаты
| КОНЕЦ КАК ОбоснованиеДляОплаты,
| ВТ_Таблица.Идентификатор КАК Идентификатор
|ПОМЕСТИТЬ ВТ_Предварительно
|ИЗ
| ВТ_Таблица КАК ВТ_Таблица
|ГДЕ
//| ВТ_Таблица.ТипОперации <> ""Возврат"" И - BSLR-4287, возвращаем возвраты по выкупам
| ВТ_Таблица.СуммаКВыплате <> 0
|
|СГРУППИРОВАТЬ ПО
| ВТ_Таблица.Артикул,
| ВТ_Таблица.ТипОперации,
| ВЫБОР
| КОГДА ВТ_Таблица.Количество = 0
| ТОГДА """"
| ИНАЧЕ ВТ_Таблица.Размер
| КОНЕЦ,
| ВЫБОР
| КОГДА ВТ_Таблица.ОбоснованиеДляОплаты <> """"
| ТОГДА """"
| ИНАЧЕ ВТ_Таблица.ОбоснованиеДляОплаты
| КОНЕЦ,
| ВЫБОР
| КОГДА ВТ_Таблица.Количество = 0
| ТОГДА """"
| ИНАЧЕ ВТ_Таблица.ШтрихКод
| КОНЕЦ,
| ВТ_Таблица.Идентификатор
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_Предварительно.ШтрихКод КАК ШтрихКод,
| ВТ_Предварительно.Артикул КАК Артикул,
//BSLR-4287
| ВТ_Предварительно.ТипОперации Как ТипОперации,
| СУММА(ВТ_Предварительно.Количество) КАК Количество,
| СУММА(ВТ_Предварительно.УслугиПоДоставке) КАК УслугиПоДоставке,
| СУММА(ВТ_Предварительно.СуммаКВыплате) КАК СуммаКВыплате,
| ВТ_Предварительно.Размер КАК Размер,
| ВТ_Предварительно.Идентификатор КАК Идентификатор
|ПОМЕСТИТЬ ВТ_ПредварительноСвернуто
|ИЗ
| ВТ_Предварительно КАК ВТ_Предварительно
|
|СГРУППИРОВАТЬ ПО
| ВТ_Предварительно.ШтрихКод,
| ВТ_Предварительно.Артикул,
| ВТ_Предварительно.Размер,
//BSLR-4287
| ВТ_Предварительно.ТипОперации,
| ВТ_Предварительно.Идентификатор
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_ПредварительноСвернуто.Артикул КАК Артикул,
| СУММА(ВТ_ПредварительноСвернуто.СуммаКВыплате) КАК СуммаКВыплате
|ИЗ
| ВТ_ПредварительноСвернуто КАК ВТ_ПредварительноСвернуто
|ГДЕ
| ВТ_ПредварительноСвернуто.ШтрихКод = """"
| И ВТ_ПредварительноСвернуто.Количество = 0
| И ВТ_ПредварительноСвернуто.Размер = """"
|
|СГРУППИРОВАТЬ ПО
| ВТ_ПредварительноСвернуто.Артикул
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_ПредварительноСвернуто.ШтрихКод КАК ШтрихКод,
| ВТ_ПредварительноСвернуто.Артикул КАК Артикул,
//BSLR-4287
| ВТ_ПредварительноСвернуто.ТипОперации Как ТипОперации,
| СУММА(ВТ_ПредварительноСвернуто.Количество) КАК Количество,
| СУММА(ВТ_ПредварительноСвернуто.УслугиПоДоставке) КАК УслугиПоДоставке,
| СУММА(ВТ_ПредварительноСвернуто.СуммаКВыплате) КАК СуммаКВыплате,
| ВТ_ПредварительноСвернуто.Размер КАК Размер,
| ВТ_ПредварительноСвернуто.Идентификатор КАК Идентификатор
|ИЗ
| ВТ_ПредварительноСвернуто КАК ВТ_ПредварительноСвернуто
|ГДЕ
| ВТ_ПредварительноСвернуто.Количество <> 0
|
|СГРУППИРОВАТЬ ПО
| ВТ_ПредварительноСвернуто.ШтрихКод,
| ВТ_ПредварительноСвернуто.Артикул,
//BSLR-4287
| ВТ_ПредварительноСвернуто.ТипОперации,
| ВТ_ПредварительноСвернуто.Размер,
| ВТ_ПредварительноСвернуто.Идентификатор
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_Таблица.Артикул КАК Артикул,
| СУММА(ВТ_Таблица.Количество) КАК Количество,
| СУММА(ВТ_Таблица.УслугиПоДоставке) КАК УслугиПоДоставке
|ИЗ
| ВТ_Таблица КАК ВТ_Таблица
|ГДЕ
| ВТ_Таблица.ТипОперации <> ""Возврат""
| И ВТ_Таблица.СуммаКВыплате = 0
|
|СГРУППИРОВАТЬ ПО
| ВТ_Таблица.Артикул");
Запрос.УстановитьПараметр("ТЗ",ТаблицаВыкупов);
Результат = запрос.ВыполнитьПакетСПромежуточнымиДанными();
ТЗТоварыВыплаты=Результат[3].Выгрузить();
ТЗТоварыПродажи=Результат[4].Выгрузить();
ТЗТовары_Доставка=Результат[5].Выгрузить();
// письмерова 09.01.2024 BSLR-4099
ТЗТовары_Доставка.Колонки.Добавить("НеНайден");
ТЗТоварыВыплаты.Колонки.Добавить("НеНайден");
Для Каждого Стр Из ТЗТовары_Доставка Цикл
Отбор = Новый Структура("Артикул", Стр.Артикул);
НайтиСтроки = ТЗТоварыПродажи.НайтиСтроки(Отбор);
// письмерова 06.12.2024 BSLR-4151
Если НайтиСтроки.Количество() Тогда
Если НайтиСтроки.Количество() > 1 ТОгда // распределяем
МассивКоэффициентов = Новый Массив;
СуммаКВыплате = 0; // BSLR-4425
Для Каждого Эл Из НайтиСтроки Цикл
Если Эл.ТипОперации = "Возврат" ТОгда // пропустить возвраты, сумма возврата не меняется BSLR-5262
Продолжить;
КонецЕсли;
МассивКоэффициентов.Добавить(Эл.СуммаКВыплате);
СуммаКВыплате = СуммаКВыплате + Эл.СуммаКВыплате; // BSLR-4425
КонецЦикла;
// письмерова 17.03.2025 BSLR-4425
// если доставка больше чему сумма к выплате, тогда доставка будет отражена услугой
Если Стр.УслугиПоДоставке > СуммаКВыплате ТОгда
Стр.НеНайден = Истина;
Иначе
РезРаспред = топ_ОбщийВызовСервера.РаспределитьПропорционально(Стр.УслугиПоДоставке, МассивКоэффициентов);
Стр.НеНайден = Истина; // письмерова 23.06.2025 BSLR-4688
Если РезРаспред <> Неопределено ТОгда
сч = 0;
Для Каждого Эл Из НайтиСтроки Цикл
Если Эл.ТипОперации = "Возврат" ТОгда // пропустить возвраты, сумма возврата не меняется BSLR-5262
Продолжить;
КонецЕсли;
Эл.УслугиПоДоставке = Эл.УслугиПоДоставке + РезРаспред[сч];
сч = сч +1;
КонецЦикла;
Стр.НеНайден = Ложь;
КонецЕсли; // BSLR-4688
КонецЕсли;
Иначе
// письмерова 17.03.2025 BSLR-4425
// если доставка больше чему сумма к выплате, тогда доставка будет отражена услугой
Если Стр.УслугиПоДоставке > НайтиСтроки[0].СуммаКВыплате Тогда
Стр.НеНайден = Истина;
Иначе
НайтиСтроки[0].УслугиПоДоставке = Стр.УслугиПоДоставке;
Стр.НеНайден = Ложь;
КонецЕсли;
КонецЕсли;
Иначе
Стр.НеНайден = Истина;
КонецЕсли;
//Если НайтиСтроки.Количество() Тогда
// НайтиСтроки[0].УслугиПоДоставке = Стр.УслугиПоДоставке;
//КонецЕсли;
КонецЦикла;
// письмерова 09.01.2024 BSLR-4099
Разница = 0;
Для Каждого Стр Из ТЗТовары_Доставка Цикл
Если Стр.НеНайден Тогда
Разница = Разница + Стр.УслугиПоДоставке;
КонецЕсли;
КонецЦикла;
Для Каждого Стр Из ТЗТоварыВыплаты Цикл
// письмерова 05.05.2025 BSLR-4542
Если Стр.СуммаКВыплате = 0 ТОгда
Продолжить;
КонецЕсли;
Отбор = Новый Структура("Артикул", Стр.Артикул);
НайтиСтроки = ТЗТоварыПродажи.НайтиСтроки(Отбор);
// письмерова 06.12.2024 BSLR-4151
Если НайтиСтроки.Количество() Тогда
Если НайтиСтроки.Количество() > 1 ТОгда // распределяем
МассивКоэффициентов = Новый Массив;
Для Каждого Эл Из НайтиСтроки Цикл
МассивКоэффициентов.Добавить(Эл.СуммаКВыплате);
КонецЦикла;
РезРаспред = топ_ОбщийВызовСервера.РаспределитьПропорционально(Стр.СуммаКВыплате, МассивКоэффициентов);
сч = 0;
Для Каждого Эл Из НайтиСтроки Цикл
Эл.СуммаКВыплате = Эл.СуммаКВыплате + РезРаспред[сч];
сч = сч +1;
КонецЦикла;
Иначе
НайтиСтроки[0].СуммаКВыплате = НайтиСтроки[0].СуммаКВыплате + Стр.СуммаКВыплате;
КонецЕсли;
КонецЕсли;
//Если НайтиСтроки.Количество() Тогда
// НайтиСтроки[0].СуммаКВыплате = НайтиСтроки[0].СуммаКВыплате + Стр.СуммаКВыплате;
//КонецЕсли;
КонецЦикла;
// итоговая сборка товаров
Запрос = Новый Запрос("ВЫБРАТЬ
| ТЗ.ШтрихКод КАК ШтрихКод,
| ТЗ.Идентификатор КАК Идентификатор,
| ТЗ.Артикул КАК Артикул,
//BSLR-4287
| ТЗ.ТипОперации КАК ТипОперации,
| ТЗ.Количество КАК Количество,
| ТЗ.УслугиПоДоставке КАК УслугиПоДоставке,
| ТЗ.СуммаКВыплате КАК СуммаКВыплате,
| ТЗ.Размер КАК Размер
|ПОМЕСТИТЬ ВТ_Таблица
|ИЗ
| &ТЗ КАК ТЗ
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_Таблица.ШтрихКод КАК ШтрихКод,
| ВТ_Таблица.Идентификатор КАК Идентификатор,
| ВТ_Таблица.Артикул КАК Артикул,
//BSLR-4287
| ВТ_Таблица.ТипОперации КАК ТипОперации,
| ВТ_Таблица.Количество КАК Количество,
| ВТ_Таблица.УслугиПоДоставке КАК УслугиПоДоставке,
| ВТ_Таблица.СуммаКВыплате КАК СуммаКВыплатеПредварительно,
| ВТ_Таблица.Размер КАК Размер,
| ВТ_Таблица.СуммаКВыплате - ВТ_Таблица.УслугиПоДоставке КАК СуммаКВыплате,
| ВЫБОР
| КОГДА ЕСТЬNULL(топ_Штрихкоды.Товар, ЗНАЧЕНИЕ(Справочник.топ_ТоварыТорговыхПлощадок.ПустаяСсылка)) = ЗНАЧЕНИЕ(Справочник.топ_ТоварыТорговыхПлощадок.ПустаяСсылка)
| ТОГДА ЕСТЬNULL(топ_ТоварыТорговыхПлощадок.Ссылка, ЗНАЧЕНИЕ(Справочник.топ_ТоварыТорговыхПлощадок.ПустаяСсылка))
| ИНАЧЕ ЕСТЬNULL(топ_Штрихкоды.Товар, ЗНАЧЕНИЕ(Справочник.топ_ТоварыТорговыхПлощадок.ПустаяСсылка))
| КОНЕЦ КАК Товар,
| ЕСТЬNULL(топ_Штрихкоды.РазмерWB, ЗНАЧЕНИЕ(Справочник.топ_РазмерыТоваровWB.ПустаяСсылка)) КАК РазмерWB
|ПОМЕСТИТЬ ВТ_СРазмерамиТоварами
|ИЗ
| ВТ_Таблица КАК ВТ_Таблица
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.топ_Штрихкоды КАК топ_Штрихкоды
| ПО ВТ_Таблица.ШтрихКод = топ_Штрихкоды.Штрихкод
| И (топ_Штрихкоды.ЛичныйКабинет = &ЛичныйКабинет)
| И (топ_Штрихкоды.Штрихкод <> """")
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.топ_ТоварыТорговыхПлощадок КАК топ_ТоварыТорговыхПлощадок
| ПО ВТ_Таблица.Идентификатор = топ_ТоварыТорговыхПлощадок.ID
| И (топ_ТоварыТорговыхПлощадок.ЛичныйКабинет = &ЛичныйКабинет)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_СРазмерамиТоварами.ШтрихКод КАК Штрихкод,
| ВТ_СРазмерамиТоварами.Идентификатор КАК Идентификатор,
| ВТ_СРазмерамиТоварами.Артикул КАК Артикул,
//BSLR-4287
| ВТ_СРазмерамиТоварами.ТипОперации КАК ТипОперации,
| ВТ_СРазмерамиТоварами.Количество КАК Количество,
| ВТ_СРазмерамиТоварами.УслугиПоДоставке КАК УслугиПоДоставке,
| ВТ_СРазмерамиТоварами.СуммаКВыплатеПредварительно КАК СуммаКВыплатеПредварительно,
| ВТ_СРазмерамиТоварами.Размер КАК Размер,
| ВТ_СРазмерамиТоварами.СуммаКВыплате КАК СуммаКВыплате,
| МАКСИМУМ(ВТ_СРазмерамиТоварами.Товар) КАК Товар,
| МАКСИМУМ(ВТ_СРазмерамиТоварами.РазмерWB) КАК РазмерWB
|ПОМЕСТИТЬ ВТ_Сгруппированы
|ИЗ
| ВТ_СРазмерамиТоварами КАК ВТ_СРазмерамиТоварами
|
|СГРУППИРОВАТЬ ПО
| ВТ_СРазмерамиТоварами.ШтрихКод,
| ВТ_СРазмерамиТоварами.Идентификатор,
| ВТ_СРазмерамиТоварами.Артикул,
//BSLR-4287
| ВТ_СРазмерамиТоварами.ТипОперации,
| ВТ_СРазмерамиТоварами.Количество,
| ВТ_СРазмерамиТоварами.УслугиПоДоставке,
| ВТ_СРазмерамиТоварами.СуммаКВыплатеПредварительно,
| ВТ_СРазмерамиТоварами.Размер,
| ВТ_СРазмерамиТоварами.СуммаКВыплате
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_Сгруппированы.Штрихкод КАК Штрихкод,
| ВТ_Сгруппированы.Идентификатор КАК Идентификатор,
| ВТ_Сгруппированы.Артикул КАК Артикул,
//BSLR-4287
| ВТ_Сгруппированы.ТипОперации КАК ТипОперации,
| ВТ_Сгруппированы.Количество КАК Количество,
| ВТ_Сгруппированы.УслугиПоДоставке КАК УслугиПоДоставке,
| ВТ_Сгруппированы.СуммаКВыплатеПредварительно КАК СуммаКВыплатеПредварительно,
| ВТ_Сгруппированы.Размер КАК Размер,
| ВТ_Сгруппированы.СуммаКВыплате КАК СуммаКВыплате,
| ЕСТЬNULL(топ_ТоварыТорговыхПлощадок.Ссылка, ВТ_Сгруппированы.Товар) КАК Товар,
| ВЫБОР
| КОГДА ВТ_Сгруппированы.РазмерWB = ЗНАЧЕНИЕ(Справочник.топ_РазмерыТоваровWB.ПустаяССылка)
| ТОГДА ЕСТЬNULL(топ_РазмерыТоваровWB.Ссылка, ЗНАЧЕНИЕ(Справочник.топ_РазмерыТоваровWB.ПустаяСсылка))
| ИНАЧЕ ВТ_Сгруппированы.РазмерWB
| КОНЕЦ КАК РазмерWB
|ПОМЕСТИТЬ ВТ_Сводная
|ИЗ
| ВТ_Сгруппированы КАК ВТ_Сгруппированы
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.топ_ТоварыТорговыхПлощадок КАК топ_ТоварыТорговыхПлощадок
| ПО ВТ_Сгруппированы.Артикул = топ_ТоварыТорговыхПлощадок.КодПоставщика
| И (топ_ТоварыТорговыхПлощадок.ЛичныйКабинет = &ЛичныйКабинет)
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.топ_РазмерыТоваровWB КАК топ_РазмерыТоваровWB
| ПО ВТ_Сгруппированы.Размер = топ_РазмерыТоваровWB.размер
| И ВТ_Сгруппированы.Товар = топ_РазмерыТоваровWB.Владелец
| И (топ_РазмерыТоваровWB.Владелец.ЛичныйКабинет = &ЛичныйКабинет)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_Сводная.Штрихкод КАК Штрихкод,
| ВТ_Сводная.Идентификатор КАК Идентификатор,
| ВТ_Сводная.Артикул КАК Артикул,
//BSLR-4287
| ВТ_Сводная.ТипОперации КАК ТипОперации,
| ВТ_Сводная.Количество КАК Количество,
| ВТ_Сводная.УслугиПоДоставке КАК УслугиПоДоставке,
| ВТ_Сводная.СуммаКВыплатеПредварительно КАК СуммаКВыплатеПредварительно,
| ВТ_Сводная.Размер КАК Размер,
| ВТ_Сводная.СуммаКВыплате КАК СуммаКВыплате,
| ВТ_Сводная.Товар КАК Товар,
| МАКСИМУМ(ВЫБОР
| КОГДА ВТ_Сводная.РазмерWB = ЗНАЧЕНИЕ(Справочник.топ_РазмерыТоваровWB.ПустаяСсылка)
| ТОГДА ЕСТЬNULL(топ_РазмерыТоваровWB.Ссылка, ЗНАЧЕНИЕ(Справочник.топ_РазмерыТоваровWB.ПустаяСсылка))
| ИНАЧЕ ВТ_Сводная.РазмерWB
| КОНЕЦ) КАК РазмерWB
|ПОМЕСТИТЬ ВТ_ТоварыСРазмерами
|ИЗ
| ВТ_Сводная КАК ВТ_Сводная
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.топ_РазмерыТоваровWB КАК топ_РазмерыТоваровWB
| ПО ВТ_Сводная.Размер = топ_РазмерыТоваровWB.размер
| И ВТ_Сводная.Товар = топ_РазмерыТоваровWB.Владелец
| И (топ_РазмерыТоваровWB.Владелец.ЛичныйКабинет = &ЛичныйКабинет)
|
|СГРУППИРОВАТЬ ПО
| ВТ_Сводная.Штрихкод,
| ВТ_Сводная.Идентификатор,
| ВТ_Сводная.Артикул,
//BSLR-4287
| ВТ_Сводная.ТипОперации,
| ВТ_Сводная.Количество,
| ВТ_Сводная.УслугиПоДоставке,
| ВТ_Сводная.СуммаКВыплатеПредварительно,
| ВТ_Сводная.Размер,
| ВТ_Сводная.СуммаКВыплате,
| ВТ_Сводная.Товар
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_ТоварыСРазмерами.Штрихкод КАК Штрихкод,
| ВТ_ТоварыСРазмерами.Идентификатор КАК Идентификатор,
| ВТ_ТоварыСРазмерами.Артикул КАК Артикул,
//BSLR-4287
| ВТ_ТоварыСРазмерами.ТипОперации КАК ТипОперации,
| ВТ_ТоварыСРазмерами.Количество КАК Количество,
| ВТ_ТоварыСРазмерами.СуммаКВыплатеПредварительно КАК СуммаКВыплатеПредварительно,
| ВТ_ТоварыСРазмерами.УслугиПоДоставке КАК УслугиПоДоставке,
| ВТ_ТоварыСРазмерами.Размер КАК Размер,
| ВТ_ТоварыСРазмерами.СуммаКВыплате КАК СуммаКВыплате,
| ВТ_ТоварыСРазмерами.Товар КАК Товар,
| ВТ_ТоварыСРазмерами.РазмерWB КАК РазмерWB,
| топ_СоответствиеТоваров.Номенклатура КАК Номенклатура,
| топ_СоответствиеТоваров.Характеристика КАК Характеристика,
//| ""Продажа"" КАК ТипОперации,
| ВТ_ТоварыСРазмерами.СуммаКВыплате / ВЫБОР
| КОГДА ВТ_ТоварыСРазмерами.Количество = 0
| ТОГДА 1
| ИНАЧЕ ВТ_ТоварыСРазмерами.Количество
| КОНЕЦ КАК Цена,
| ВТ_ТоварыСРазмерами.СуммаКВыплате КАК Сумма,
| ЛОЖЬ КАК ЭтоНабор,
| НЕОПРЕДЕЛЕНО КАК СтавкаНДС,
// письмерова 19.08.2025 BSLR-4800
| ВЫБОР
| КОГДА топ_СоответствиеТоваров.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяССылка)
| ТОГДА топ_СоответствиеТоваров.Номенклатура.ЕдиницаИзмерения
| ИНАЧЕ топ_СоответствиеТоваров.Упаковка
| КОНЕЦ КАК ЕдиницаИзмерения
|ИЗ
| ВТ_ТоварыСРазмерами КАК ВТ_ТоварыСРазмерами
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.топ_СоответствиеТоваров КАК топ_СоответствиеТоваров
| ПО ВТ_ТоварыСРазмерами.Товар = топ_СоответствиеТоваров.Товар
| И ВТ_ТоварыСРазмерами.РазмерWB = топ_СоответствиеТоваров.РазмерWB");
Запрос.УстановитьПараметр("ТЗ",ТЗТоварыПродажи);
Запрос.УстановитьПараметр("ЛичныйКабинет",Объект.ЛичныйКабинет);
ВремТаблВЫкуп = Запрос.Выполнить().Выгрузить();
ВремТаблВЫкуп.Колонки.Добавить("СуммаНДС");
ЕстьНДС = топ_ОбщийВызовСервера.НалогообложениеНДСДляЗагрузкиДанныхАПИ(Объект.ЛичныйКабинет,Объект.ДатаОкончания);
// Ставка Без НДС
Если топ_ОбщийМодульСервер.ЭтаКонфигурация("УправлениеТорговлей", "11.4")
ИЛИ топ_ОбщийМодульСервер.ЭтаКонфигурация("КомплекснаяАвтоматизация", "2.4.")
ИЛИ топ_ОбщийМодульСервер.ЭтаКонфигурация("УправлениеПредприятием", "2.4.") Тогда
СтавкаБезНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.БезНДС");
Иначе
СтавкаБезНДС = ПредопределенноеЗначение("Справочник.СтавкиНДС.БезНДС");
КонецЕсли;
// письмерова 21.01.2025 BSLR-4260
// только ут
ДействующиеНастройки = Неопределено;
СтавкаНДС = Неопределено;
ДействующиеНастройки = ПолучитьДействующиеПараметрыНалоговУчетныхПолитикНаДату(
"НастройкиУчетаНДСПриУСН", Объект.ЛичныйКабинет, Период.ДатаОкончания, Ложь);
Если ДействующиеНастройки <> Неопределено Тогда
СтавкаНДС = ДействующиеНастройки.СтавкаНДС;
Иначе
СтавкаНДС = ПолучитьСтавкуНДСПоУмолчанию(Объект.ЛичныйКабинет,Объект.ДатаОкончания); // письмерова 16.04.2025
КонецЕсли;
// письмерова 07.04.2025 BSLR-4462
Если Объект.ЛичныйКабинет.СтавкаНДСИзНоменклатуры ТОгда
СтавкаНДС = Неопределено;
КонецЕсли;
для каждого СтрокаТЗ из ВремТаблВЫкуп Цикл
//получим ставку НДС
если ЗначениеЗаполнено(строкаТЗ.Номенклатура) тогда
Если ЕстьНДС ТОгда // типовая схема
строкаТЗ.СтавкаНДС = ?(СтавкаНДС = Неопределено,топ_ОбщийВызовСервера.БИТ_СтавкаНДС_Номенклатуры(строкаТЗ.Номенклатура,Объект.ЛичныйКабинет,Объект.ДатаОкончания),СтавкаНДС); // BSLR-4260
СтавкаНДСЗнач = топ_ОбщийВызовСервера.БИТ_ПолучитьЗначениеСтавкиНДС(строкаТЗ.СтавкаНДС);
строкаТЗ.СуммаНДС = строкаТЗ.СуммаКВыплате * СтавкаНДСЗнач / (100 + СтавкаНДСЗнач);
Иначе // обнуляем НДС
строкаТЗ.СтавкаНДС = СтавкаБезНДС;
строкаТЗ.СуммаНДС = 0;
КонецЕсли;
Если СтрокаТЗ.Номенклатура.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Набор Тогда
СтрокаТЗ.ЭтоНабор = истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
// письмерова 09.01.2024 BSLR-4099
Результат = Новый Структура("ВремТаблВЫкуп, Разница",ВремТаблВЫкуп,Разница);
Возврат Результат;
//Возврат ВремТаблВЫкуп;
КонецФункции
// письмерова 09.01.2024 BSLR-4099
&НаСервере
Процедура ДополнитьУслугиДаннымиДоставкаВыкупы(СуммаДоставки)
Если Объект.Услуги.НайтиСтроки(новый Структура("НаименованиеМП", "DeliveryServiceBasedOnTheReport")).Количество() ТОгда
СтрокаУслуг = Объект.Услуги.НайтиСтроки(новый Структура("НаименованиеМП", "DeliveryServiceBasedOnTheReport"))[0];
Иначе // нет услуги
// письмерова 20.01.2024 BSLR-4099
СтрокаУслуг = Объект.Услуги.Добавить();
КонецЕсли;
СтрокаУслуг.Наименование = "Услуга доставки по отчету о выкупах за период";
СтрокаУслуг.НаименованиеМП = "DeliveryServiceBasedOnTheReport";
СтрокаУслуг.УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоРеквизиту("ЛитералУслуги","DeliveryServiceBasedOnTheReport");
Если СтрокаУслуг.УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.ПустаяСсылка() Тогда // нет элемента справочника УслугиМП, но он есть в перечне
Перечень = Новый соответствие;
Перечень.Вставить("DeliveryServiceBasedOnTheReport","Услуга доставки по отчету о выкупах за период");
ПереченьНДС = Новый соответствие;
ПереченьНДС.Вставить("DeliveryServiceBasedOnTheReport","22%");
топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.СоздатьЭлементыНоменклатурыУслугМП(Перечень,ПереченьНДС,
Перечисления.топ_ТорговыеПлощадки.Wildberries,
Неопределено);
СтрокаУслуг.УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоРеквизиту("ЛитералУслуги", "DeliveryServiceBasedOnTheReport");
Конецесли;
СтрокаУслуг.Номенклатура = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьНоменклатуруДопУслугиМП(Перечисления.топ_ТорговыеПлощадки.Wildberries, СтрокаУслуг.УслугаМП);
СтрокаУслуг.СтавкаНДС = Строка(топ_ОбщийВызовСервера.БИТ_СтавкаНДС_Номенклатуры(СтрокаУслуг.Номенклатура,Объект.ЛичныйКабинет,Объект.ДатаОкончания));
СтавкаНДСЗнач = топ_ОбщийВызовСервера.БИТ_ПолучитьЗначениеСтавкиНДС(топ_ОбщийВызовСервера.ПолучитьСтавкуНДСПоИдентификатору(СтрокаУслуг.СтавкаНДС));
СтрокаУслуг.Сумма = СуммаДоставки;
СтрокаУслуг.СуммаНДС = СуммаДоставки * СтавкаНДСЗнач /(100 + СтавкаНДСЗнач);
КонецПроцедуры
// письмерова 16.10.2025 BSLR-4460
&НаСервере
Процедура ЗаполнитьТабЧастьКомпенсации(Товары, ЭтоАпи = Ложь)
Если ЭтоАпи ТОгда
ОБъект.Компенсации.Очистить();
Для Каждого Стр из Товары Цикл
нСтр = ОБъект.Компенсации.Добавить();
ЗаполнитьЗначенияСвойств(нСтр,Стр);
Если Стр.ТипОперации = "Возврат" Тогда
нСтр.Количество = - нСтр.Количество;
КонецЕсли;
нСтр.ТипКомпенсации = Стр.ОбоснованиеДляОплаты;
нСтр.СтоимостьТовара = Стр.Сумма;
нСтр.СтоимостьВсего = Стр.Сумма;
нСтр.ИтогоКНачислению = Стр.Сумма;
КонецЦикла;
Иначе
ОБъект.Компенсации.Очистить();
Для Каждого Стр из Товары Цикл
нСтр = ОБъект.Компенсации.Добавить();
ЗаполнитьЗначенияСвойств(нСтр,Стр);
нСтр.ТипКомпенсации = Стр.ТипОперации;
нСтр.СтоимостьТовара = Стр.Сумма;
нСтр.СтоимостьВсего = Стр.Сумма;
нСтр.ИтогоКНачислению = Стр.Сумма;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
#конецОбласти
#Область ЗагрузкаИзЭксельЯМ
&НаСервере
Функция ЗагрузитьНаСервереЯМ(Знач Адрес, Расширение, ЭтоВыкупы)
Результат = Новый Структура("Ошибка, Сообщение, СписокТоваров, СписокУслуг",
Ложь, "", Новый Массив, Новый Массив);
ПерваяСтрока = 0;
ТаблицаТоваров = ПолучитьТаблицуЗагрузкиТоваровЯМ();
ФайлВременногоХранилища = ПолучитьИзВременногоХранилища(Адрес);
ИмяФайла = ПолучитьИмяВременногоФайла(Расширение);
ЕстьДанныеОтправления = Ложь;
Попытка
ФайлВременногоХранилища.Записать(ИмяФайла);
Исключение
Результат.Ошибка = Истина;
Результат.Сообщение = "Ошибка при загрузке файла, повторите попытку";
Возврат Результат;
КонецПопытки;
УдалитьИзВременногоХранилища(Адрес);
MXL = Новый ТабличныйДокумент;
MXL.Прочитать(ИмяФайла);
Файл = Новый Файл(ИмяФайла);
Если Файл.Существует() Тогда
УдалитьФайлы(ИмяФайла);
КонецЕсли;
MXLОбщая = MXL;
// письмерова 16.04.2025 BSLR-4525
ФайлВерный = Ложь;
Если Объект.ЛичныйКабинет.ИспользуетсяСхемаDBS ТОгда
Если MXLОбщая.Области.Найти("Доставлено") <> Неопределено
И MXLОбщая.Области.Найти("Возвращено") <> Неопределено Тогда
ФайлВерный = Истина;
КонецЕсли;
Иначе
Если MXLОбщая.Области.Найти("Доставленные_товары") <> Неопределено
И MXLОбщая.Области.Найти("Невыкупленные_товары") <> Неопределено // письмерова 07.05.2024 BSLR-3519
И (MXLОбщая.Области.Найти("Возвращённые_товары") <> Неопределено
Или MXLОбщая.Области.Найти("Возвращенные_товары") <> Неопределено) Тогда
ФайлВерный = Истина;
КонецЕсли;
КонецЕсли;
Если ФайлВерный ТОгда // BSLR-4525
Если Объект.ЛичныйКабинет.ИспользуетсяСхемаDBS ТОгда
MXL = MXLОбщая.ПолучитьОбласть("Доставлено");
Иначе
MXL = MXLОбщая.ПолучитьОбласть("Доставленные_товары");
КонецЕсли;
КоличествоСтрок = MXL.ВысотаТаблицы;
КоличествоКолонок = MXL.ШиринаСтраницы;
Для ТекущаяСтрока = 1 По КоличествоСтрок Цикл
Для ТекущаяКолонка = 1 По КоличествоКолонок Цикл
ТекстЯчейки = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + ТекущаяКолонка).ТекущаяОбласть.Текст);
Если СтрНайти(ТекстЯчейки, "Отчёт по данным статистики") <> 0 Тогда
ПозицияНомераНачало = СтрНайти(ТекстЯчейки, "№");
НомерОправления = СокрЛП(Сред(ТекстЯчейки, ПозицияНомераНачало + 2));
Объект.НомерВходящегоДокумента = НомерОправления;
КонецЕсли;
Если СтрНайти(ТекстЯчейки, "за период") <> 0 Тогда
ОбработатьСтрокуДатыЯМ(ТекстЯчейки);
ПозицияДаты = СтрНайти(ТекстЯчейки, "по");
ДатаОтправленияСтрока = СокрЛП(Сред(ТекстЯчейки, ПозицияДаты + 3));
Попытка
ДатаОтправления = Дата(ДатаОтправленияСтрока);
Объект.ДатаВходящегоДокумента = ДатаОтправления;
Исключение
ОбщегоНазначения.СообщитьПользователю("Не удалось определить дату входящего документа из файла. Укажите дату вручную");
КонецПопытки;
КонецЕсли;
Если ТекстЯчейки = "Номер заказа" Тогда
ПерваяСтрока = ТекущаяСтрока + 1;
КонецЕсли;
Если ЗначениеЗаполнено(ПерваяСтрока) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Если ПерваяСтрока = 0 Тогда
Результат.Ошибка = Истина;
ОбщегоНазначения.СообщитьПользователю("Выбран не тот документ, скачайте из ЛК на маркетплейсе документ ""Отчёт по данным статистики по Договору""");
Возврат Результат;
КонецЕсли;
Иначе
Результат.Ошибка = Истина;
ОбщегоНазначения.СообщитьПользователю("Выбран не тот документ, скачайте из ЛК на маркетплейсе документ ""Отчёт по данным статистики по Договору""");
Возврат Результат;
КонецЕсли;
НомераКолонокФайла = СоответствиеКолонокФайлаЗагрузкиЯМ(MXL, ПерваяСтрока-1);
СтоимостьДостакиКГТ = 0; // письмерова 20.08.2025 BSLR-4676
// письмерова 18.09.2025 BSLR-4418
ЕстьРасширениеУПД = топ_ОбщийВызовСервера.ПроверкаНаличияРасширенияВБазе("БИТ_УправлениеМаркетплейсами_УПД");
Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок Цикл
Если СтрНайти(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.Номер_Заказ).ТекущаяОбласть.Текст), "Итого:") <> 0 Тогда
Прервать;
КонецЕсли;
// письмерова 16.04.2025 BSLR-4525
Если MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.Количество).ТекущаяОбласть.Текст = "" ТОгда
// письмерова 20.08.2025 BSLR-4676
Название = MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.Наименование).ТекущаяОбласть.Текст;
Если СтрНайти(ВРЕГ(Название),"ДОСТАВКА") > 0 ТОгда
СтоимостьДостакиКГТ = СтоимостьДостакиКГТ + Число(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.Цена).ТекущаяОбласть.Текст)
КонецЕсли;
ПРодолжить;
КонецЕсли;
// Стрелкова Н. 08.04.26 BSLR-5296 данные с листа Доставленные_товары берутся только по розничным продажам
Если Объект.ЛичныйКабинет.РежимЗагрузкиПродажЮЛ = Перечисления.топ_РежимыЗагрузкиПродажЮЛ.ПередачаВДоставку ТОгда // BSLR-5296
Если НЕ Объект.ЛичныйКабинет.ИспользуетсяСхемаDBS И MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.ТипЗаказа).ТекущаяОбласть.Текст = "Продажа бизнесу" Тогда
Продолжить;
КонецЕсли;
КонецЕсли; // BSLR-5296
КоличествоПродано = Число(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.Количество).ТекущаяОбласть.Текст);
НоваяСтрока = ТаблицаТоваров.Добавить();
НоваяСтрока.ТипОперации = "Продажа";
НоваяСтрока.Количество = КоличествоПродано;
ЗаполнитьСтрокуТаблицыТоваровЯМ(НоваяСтрока, MXL, ТекущаяСтрока, НомераКолонокФайла,,,ЕстьРасширениеУПД);
// письмерова 20.11.2024 BSLR-4095
Если Объект.ДатаНачала >= Дата(2024,10,1) Тогда // пересчет цены и суммы
// письмерова 31.01.2025 BSLR-4195
Если НЕ Объект.ЛичныйКабинет.ЗагружатьСуммуСкидокВУслугу Тогда // если не грузим в услугу, грузим в ОК
НоваяСтрока.Сумма = НоваяСтрока.Сумма + НоваяСтрока.СуммаДоплатыOzon; // BSLR-4486
НоваяСтрока.Цена = НоваяСтрока.Сумма / ?(НоваяСтрока.Количество <> 0, НоваяСтрока.Количество, 1);
КонецЕсли;
НоваяСтрока.СуммаДоплатыOzon = - НоваяСтрока.СуммаДоплатыOzon; // BSLR-5615
КонецЕсли;
// письмерова 14.12.2023 BSLR-2680
Если ЗначениеЗаполнено(НоваяСтрока.НомерСЧФакт) ТОгда
НоваяСтрока.Покупатель = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", НоваяСтрока.ИНН);
Если НоваяСтрока.Покупатель = Справочники.Контрагенты.ПустаяСсылка() ТОгда
Если СоздаватьКонтрагентов ТОгда
НовыйКонтрагент = СоздатьЮЛ(НоваяСтрока,Объект.ЛичныйКабинет.Организация);
Сообщить("Создан новый контрагент " + НовыйКонтрагент);
НоваяСтрока.Покупатель = НовыйКонтрагент.Ссылка;
Иначе
Сообщить("не найден контрагент ИНН" + НоваяСтрока.ИНН + " " + НоваяСтрока.НаименованиеПокупателя);
НоваяСтрока.Покупатель = Строка(НоваяСтрока.ИНН + " " + НоваяСтрока.НаименованиеПокупателя);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
// письмерова 16.04.2025 BSLR-4525
Если Объект.ЛичныйКабинет.ИспользуетсяСхемаDBS ТОгда
MXL = MXLОбщая.ПолучитьОбласть("Возвращено");
Иначе
Если MXLОбщая.Области.Найти("Возвращённые_товары") <> Неопределено ТОгда
MXL = MXLОбщая.ПолучитьОбласть("Возвращённые_товары");
ИначеЕсли MXLОбщая.Области.Найти("Возвращенные_товары") <> Неопределено ТОгда
MXL = MXLОбщая.ПолучитьОбласть("Возвращенные_товары");
Иначе
Результат.Ошибка = Истина;
ОбщегоНазначения.СообщитьПользователю("Выбран не тот документ, скачайте из ЛК на маркетплейсе документ ""Отчёт по данным статистики по Договору""");
Возврат Результат;
КонецЕсли;
КонецЕсли;
КоличествоСтрок = MXL.ВысотаТаблицы;
КоличествоКолонок = MXL.ШиринаСтраницы;
НомераКолонокФайла = СоответствиеКолонокФайлаЗагрузкиЯМ(MXL, ПерваяСтрока-1);
Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок Цикл
Если Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.Номер_Заказ).ТекущаяОбласть.Текст) = "Итого:" Тогда
Прервать;
КонецЕсли;
// письмерова 16.04.2025 BSLR-4525
Если MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.КоличествоВозврат).ТекущаяОбласть.Текст = "" ТОгда
ПРодолжить;
КонецЕсли;
КоличествоВозврат = Число(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.КоличествоВозврат).ТекущаяОбласть.Текст);
НоваяСтрока = ТаблицаТоваров.Добавить();
НоваяСтрока.ТипОперации = "Возврат";
НоваяСтрока.Количество = КоличествоВозврат;
НоваяСтрока.Количество = НоваяСтрока.Количество * -1;
ЗаполнитьСтрокуТаблицыТоваровЯМ(НоваяСтрока, MXL, ТекущаяСтрока, НомераКолонокФайла,Истина,,ЕстьРасширениеУПД );
// письмерова 20.11.2024 BSLR-4095
Если Объект.ДатаНачала >= Дата(2024,10,1) Тогда // пересчет цены и суммы
// письмерова 31.01.2025 BSLR-4195
Если НЕ Объект.ЛичныйКабинет.ЗагружатьСуммуСкидокВУслугу Тогда // если не грузим в услугу, грузим в ОК
НоваяСтрока.Сумма = НоваяСтрока.Сумма + НоваяСтрока.СуммаДоплатыOzon; // BSLR-4486
НоваяСтрока.Цена = НоваяСтрока.Сумма / ?(НоваяСтрока.Количество <> 0, НоваяСтрока.Количество, 1);
КонецЕсли;
НоваяСтрока.СуммаДоплатыOzon = - НоваяСтрока.СуммаДоплатыOzon; // BSLR-5615
КонецЕсли;
// письмерова 14.12.2023 BSLR-2680
Если ЗначениеЗаполнено(НоваяСтрока.НомерСЧФакт) ТОгда
НоваяСтрока.Покупатель = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", НоваяСтрока.ИНН);
Если НоваяСтрока.Покупатель = Справочники.Контрагенты.ПустаяСсылка() ТОгда
Если СоздаватьКонтрагентов ТОгда
НовыйКонтрагент = СоздатьЮЛ(НоваяСтрока,Объект.ЛичныйКабинет.Организация);
Сообщить("Создан новый контрагент " + НовыйКонтрагент);
НоваяСтрока.Покупатель = НовыйКонтрагент.Ссылка;
Иначе
Сообщить("не найден контрагент ИНН" + НоваяСтрока.ИНН + " " + НоваяСтрока.НаименованиеПокупателя);
НоваяСтрока.Покупатель = Строка(НоваяСтрока.ИНН + " " + НоваяСтрока.НаименованиеПокупателя);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если Объект.ЛичныйКабинет.РежимЗагрузкиПродажЮЛ = Перечисления.топ_РежимыЗагрузкиПродажЮЛ.ПередачаВДоставку ТОгда // BSLR-5296
// Стрелкова Н. 08.04.26 BSLR-5296 {
// Данные листа Товары__переданные_в_доставку берутся только по продажам бизнесу
Если НЕ Объект.ЛичныйКабинет.ИспользуетсяСхемаDBS И MXLОбщая.ПолучитьОбласть("Товары__переданные_в_доставку") <> Неопределено Тогда
MXL = MXLОбщая.ПолучитьОбласть("Товары__переданные_в_доставку");
КоличествоСтрок = MXL.ВысотаТаблицы;
КоличествоКолонок = MXL.ШиринаСтраницы;
НомераКолонокФайла = СоответствиеКолонокФайлаЗагрузкиЯМ(MXL, ПерваяСтрока-1);
СтоимостьДостакиКГТ = 0; // письмерова 20.08.2025 BSLR-4676
// письмерова 18.09.2025 BSLR-4418
ЕстьРасширениеУПД = топ_ОбщийВызовСервера.ПроверкаНаличияРасширенияВБазе("БИТ_УправлениеМаркетплейсами_УПД");
Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок Цикл
Если СтрНайти(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.Номер_Заказ).ТекущаяОбласть.Текст), "Итого:") <> 0 Тогда
Прервать;
КонецЕсли;
Если MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.ТипЗаказа).ТекущаяОбласть.Текст <> "Продажа бизнесу" Тогда
Продолжить;
КонецЕсли;
// письмерова 16.04.2025 BSLR-4525
Если MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.Количество).ТекущаяОбласть.Текст = "" ТОгда
// письмерова 20.08.2025 BSLR-4676
Название = MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.Наименование).ТекущаяОбласть.Текст;
Если СтрНайти(ВРЕГ(Название),"ДОСТАВКА") > 0 ТОгда
СтоимостьДостакиКГТ = СтоимостьДостакиКГТ + Число(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.Цена).ТекущаяОбласть.Текст)
КонецЕсли;
ПРодолжить;
КонецЕсли;
КоличествоПродано = Число(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.Количество).ТекущаяОбласть.Текст);
НоваяСтрока = ТаблицаТоваров.Добавить();
НоваяСтрока.ТипОперации = "Продажа";
НоваяСтрока.Количество = КоличествоПродано;
ЗаполнитьСтрокуТаблицыТоваровЯМ(НоваяСтрока, MXL, ТекущаяСтрока, НомераКолонокФайла,,,ЕстьРасширениеУПД);
// письмерова 20.11.2024 BSLR-4095
Если Объект.ДатаНачала >= Дата(2024,10,1) Тогда // пересчет цены и суммы
// письмерова 31.01.2025 BSLR-4195
Если НЕ Объект.ЛичныйКабинет.ЗагружатьСуммуСкидокВУслугу Тогда // если не грузим в услугу, грузим в ОК
НоваяСтрока.Сумма = НоваяСтрока.Сумма + НоваяСтрока.СуммаДоплатыOzon; // BSLR-4486
НоваяСтрока.Цена = НоваяСтрока.Сумма / ?(НоваяСтрока.Количество <> 0, НоваяСтрока.Количество, 1);
КонецЕсли;
НоваяСтрока.СуммаДоплатыOzon = - НоваяСтрока.СуммаДоплатыOzon; // BSLR-5615
КонецЕсли;
// письмерова 14.12.2023 BSLR-2680
Если ЗначениеЗаполнено(НоваяСтрока.НомерСЧФакт) ТОгда
НоваяСтрока.Покупатель = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", НоваяСтрока.ИНН);
Если НоваяСтрока.Покупатель = Справочники.Контрагенты.ПустаяСсылка() ТОгда
Если СоздаватьКонтрагентов ТОгда
НовыйКонтрагент = СоздатьЮЛ(НоваяСтрока,Объект.ЛичныйКабинет.Организация);
Сообщить("Создан новый контрагент " + НовыйКонтрагент);
НоваяСтрока.Покупатель = НовыйКонтрагент.Ссылка;
Иначе
Сообщить("не найден контрагент ИНН" + НоваяСтрока.ИНН + " " + НоваяСтрока.НаименованиеПокупателя);
НоваяСтрока.Покупатель = Строка(НоваяСтрока.ИНН + " " + НоваяСтрока.НаименованиеПокупателя);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
// Данные листа Невыкупленные_товары берутся только по продажам бизнесу
Если НЕ Объект.ЛичныйКабинет.ИспользуетсяСхемаDBS И MXLОбщая.Области.Найти("Невыкупленные_товары") <> Неопределено Тогда
MXL = MXLОбщая.ПолучитьОбласть("Невыкупленные_товары");
КоличествоСтрок = MXL.ВысотаТаблицы;
КоличествоКолонок = MXL.ШиринаСтраницы;
НомераКолонокФайла = СоответствиеКолонокФайлаЗагрузкиЯМ(MXL, ПерваяСтрока-1);
Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок Цикл
Если Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.Номер_Заказ).ТекущаяОбласть.Текст) = "Итого:" Тогда
Прервать;
КонецЕсли;
Если MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.КоличествоВозврат).ТекущаяОбласть.Текст = "" ТОгда
Продолжить;
КонецЕсли;
Если MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.ТипЗаказа).ТекущаяОбласть.Текст <> "Продажа бизнесу" Тогда
Продолжить;
КонецЕсли;
КоличествоВозврат = Число(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.КоличествоВозврат).ТекущаяОбласть.Текст);
НоваяСтрока = ТаблицаТоваров.Добавить();
НоваяСтрока.ТипОперации = "Возврат";
НоваяСтрока.Количество = КоличествоВозврат;
НоваяСтрока.Количество = НоваяСтрока.Количество * -1;
ЗаполнитьСтрокуТаблицыТоваровЯМ(НоваяСтрока, MXL, ТекущаяСтрока, НомераКолонокФайла,Истина,,ЕстьРасширениеУПД );
Если Объект.ДатаНачала >= Дата(2024,10,1) Тогда // пересчет цены и суммы
Если НЕ Объект.ЛичныйКабинет.ЗагружатьСуммуСкидокВУслугу Тогда // если не грузим в услугу, грузим в ОК
НоваяСтрока.Сумма = НоваяСтрока.Сумма + НоваяСтрока.СуммаДоплатыOzon; // BSLR-4486
НоваяСтрока.Цена = НоваяСтрока.Сумма / ?(НоваяСтрока.Количество <> 0, НоваяСтрока.Количество, 1);
КонецЕсли;
НоваяСтрока.СуммаДоплатыOzon = - НоваяСтрока.СуммаДоплатыOzon; // BSLR-5615
КонецЕсли;
Если ЗначениеЗаполнено(НоваяСтрока.НомерСЧФакт) ТОгда
НоваяСтрока.Покупатель = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", НоваяСтрока.ИНН);
Если НоваяСтрока.Покупатель = Справочники.Контрагенты.ПустаяСсылка() ТОгда
Если СоздаватьКонтрагентов ТОгда
НовыйКонтрагент = СоздатьЮЛ(НоваяСтрока,Объект.ЛичныйКабинет.Организация);
Сообщить("Создан новый контрагент " + НовыйКонтрагент);
НоваяСтрока.Покупатель = НовыйКонтрагент.Ссылка;
Иначе
Сообщить("не найден контрагент ИНН" + НоваяСтрока.ИНН + " " + НоваяСтрока.НаименованиеПокупателя);
НоваяСтрока.Покупатель = Строка(НоваяСтрока.ИНН + " " + НоваяСтрока.НаименованиеПокупателя);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
// } Стрелкова Н. 08.04.26 BSLR-5296
КонецЕсли; // BSLR-5296
//а=1;
Если ТаблицаТоваров.Количество() Тогда
Результат.СписокТоваров = ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаТоваров);
Результат.СписокУслуг = Новый Массив;
ДанныеЗагрузки = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьДанныеИзВыгрузки(Результат, Маркетплейс, Объект.ЛичныйКабинет, Истина, Объект.ДатаОкончания);
Если ДанныеЗагрузки.Ошибка Тогда
Результат.Ошибка = Истина;
Результат.Сообщение = Результат.Сообщение;
Возврат Результат;
КонецЕсли;
// письмерова 20.08.2025 BSLR-4676
// добавим услугу Доставка КГТ, если она > 0
Если СтоимостьДостакиКГТ > 0 ТОгда
нСтр = ДанныеЗагрузки.Услуги.Добавить();
УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоРеквизиту("ЛитералУслуги", "Доставка КГТ");
нСтр.УслугаМП = УслугаМП;
нСтр.Наименование = УслугаМП.Наименование;
нСтр.НаименованиеМП = УслугаМП.ЛитералУслуги;
нСтр.Сумма = СтоимостьДостакиКГТ;
нСтр.Номенклатура = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьНоменклатуруДопУслугиМП(Перечисления.топ_ТорговыеПлощадки.ЯндексМаркет, УслугаМП);
СтавкаНДС = нСтр.Номенклатура.СтавкаНДС;
нСтр.СтавкаНДС = СтавкаНДС;
ЗначСтавки = топ_ОбщийВызовСервера.БИТ_ПолучитьЗначениеСтавкиНДС(СтавкаНДС);
нСтр.СуммаНДС = нСтр.Сумма * ЗначСтавки/ (ЗначСтавки + 100) ;
КонецЕсли;
// получить признак набора для номенклатуры
Если Константы.ИспользоватьНаборы.Получить() Тогда
ДанныеЗагрузки.Товары = топ_ОбщийВызовСервера.ДополнитьДаннымиНаборов(ДанныеЗагрузки.Товары);
КонецЕсли;
Если ЭтоВыкупы Тогда
Результат.Вставить("ТоварыВыкуп", топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ТаблицаЗначенийВМассив(ДанныеЗагрузки.Товары));
Иначе
Результат.Вставить("Товары", топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ТаблицаЗначенийВМассив(ДанныеЗагрузки.Товары));
Результат.Вставить("Услуги", топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ТаблицаЗначенийВМассив(ДанныеЗагрузки.Услуги));
КонецЕсли;
Иначе // письмерова 18.12.2023 BSLR-2973
Результат.Ошибка = Истина;
Результат.Сообщение = "За выбранный период не было продаж";
Возврат Результат;
КонецЕсли;
//
Возврат Результат;
КонецФункции
&НаСерверебезконтекста
Процедура ОбработатьСтрокуДатыЯМ(ТекстЯчейки);
ТекстЯчейки = СтрЗаменить(ТекстЯчейки, "за период с", "");
ТекстЯчейки = СтрЗаменить(ТекстЯчейки, " января ", ".01.");
ТекстЯчейки = СтрЗаменить(ТекстЯчейки, " февраля ", ".02.");
ТекстЯчейки = СтрЗаменить(ТекстЯчейки, " марта ", ".03.");
ТекстЯчейки = СтрЗаменить(ТекстЯчейки, " апреля ", ".04.");
ТекстЯчейки = СтрЗаменить(ТекстЯчейки, " мая ", ".05.");
ТекстЯчейки = СтрЗаменить(ТекстЯчейки, " июня ", ".06.");
ТекстЯчейки = СтрЗаменить(ТекстЯчейки, " июля ", ".07.");
ТекстЯчейки = СтрЗаменить(ТекстЯчейки, " августа ", ".08.");
ТекстЯчейки = СтрЗаменить(ТекстЯчейки, " сентября ", ".09.");
ТекстЯчейки = СтрЗаменить(ТекстЯчейки, " октября ", ".10.");
ТекстЯчейки = СтрЗаменить(ТекстЯчейки, " ноября ", ".11.");
ТекстЯчейки = СтрЗаменить(ТекстЯчейки, " декабря ", ".12.");
ТекстЯчейки = СтрЗаменить(ТекстЯчейки, "года", "");
ТекстЯчейки = ТекстЯчейки + " 00:00:00";
КонецПроцедуры
&НаСерверебезконтекста
Функция ЗаголовкиТаблицыЯМ()
МассивКолонок = Новый Массив;
МассивКолонок.Добавить("Номер заказа");
МассивКолонок.Добавить("Тип заказа");
МассивКолонок.Добавить("Название товара");
МассивКолонок.Добавить("Ваш SKU");
МассивКолонок.Добавить("Количество переданных в доставку, шт.");
МассивКолонок.Добавить("Статус заказа");
МассивКолонок.Добавить("Дата оформления заказа");
МассивКолонок.Добавить("Дата передачи товара в доставку");
МассивКолонок.Добавить("Дата доставки товара");
МассивКолонок.Добавить("Способ оплаты");
МассивКолонок.Добавить("Ставка НДС");
МассивКолонок.Добавить("Цена c НДС без учёта скидок, руб. за шт.");
МассивКолонок.Добавить("Ваша скидка по акции маркетплейса, руб. на 1 шт.");
МассивКолонок.Добавить("Ваша скидка по бонусам СберСпасибо (за шт.), руб. на 1 шт.");
МассивКолонок.Добавить("Ваша скидка по баллам Яндекс.Плюса, руб. на 1 шт.");
МассивКолонок.Добавить("Цена с НДС с учётом всех скидок, руб. за шт.");
МассивКолонок.Добавить("Стоимость всех переданных в доставку штук с НДС без учёта скидок, руб.");
МассивКолонок.Добавить("Сумма всех скидок для возвращённых штук, руб.");
МассивКолонок.Добавить("Стоимость всех возвращённых штук с НДС с учётом всех скидок, руб.");
МассивКолонок.Добавить("ИНН покупателя");
МассивКолонок.Добавить("КПП покупателя");
МассивКолонок.Добавить("Дата УПД");
МассивКолонок.Добавить("Номер УПД");
МассивКолонок.Добавить("Дата УКД");
МассивКолонок.Добавить("Номер УКД");
Возврат МассивКолонок;
КонецФункции
&НаСерверебезконтекста
Процедура ЗаполнитьСтрокуТаблицыТоваровЯМ(СтрокаПриемник, ТабличныйДокумент, ТекущаяСтрока, НомераКолонокФайла, ЭтоВозврат = Ложь, ЭтоВыкупы = Ложь, ЕстьРасширениеУПД = Ложь)
XMLТекущаяСтрока = XMLСтрока(ТекущаяСтрока);
СтрокаПриемник.НомерСтроки = ТекущаяСтрока - 1;
СтрокаПриемник.Артикул = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Артикул).ТекущаяОбласть.Текст);
СтрокаПриемник.Наименование = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Наименование).ТекущаяОбласть.Текст);
СтрокаПриемник.ИД_Заказ = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Номер_Заказ).ТекущаяОбласть.Текст);
СтрокаПриемник.Номер_Заказ = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Номер_Заказ).ТекущаяОбласть.Текст);
СтрокаПриемник.ДатаЗаказа = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ДатаЗаказа).ТекущаяОбласть.Текст);
Если ЭтоВозврат Тогда
// письмерова 11.12.2023 BSLR-2422
СтавкаНДССтрокой = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СтавкаНДС).ТекущаяОбласть.Текст);
СтрокаПриемник.Цена = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ЦенаВозврат).ТекущаяОбласть.Текст);
СтрокаПриемник.Сумма = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СуммаВозврат).ТекущаяОбласть.Текст);
// письмерова 19.11.2024 BSLR-4095
СтрокаПриемник.СуммаДоплатыOzon = -1 * Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СуммаДоплатыOzonВозврат).ТекущаяОбласть.Текст);
Если СтавкаНДССтрокой <> "" Тогда
СтавкаНДС = Число(СтрЗаменить(СтрЗаменить(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СтавкаНДСВозврат).ТекущаяОбласть.Текст, "%", ""), "Без НДС", "0"));
СтрокаПриемник.СтавкаНДСЗнач = ?(СтавкаНДС = 0, "Без НДС", Строка(СтавкаНДС) + "%");
СтрокаПриемник.НДС = СтрокаПриемник.Сумма / (100 + СтавкаНДС) * СтавкаНДС;
КонецЕсли;
СтрокаПриемник.Сумма = СтрокаПриемник.Сумма * -1;
Иначе
// письмерова 11.12.2023 BSLR-2422
СтавкаНДССтрокой = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СтавкаНДС).ТекущаяОбласть.Текст);
СтрокаПриемник.Цена = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Цена).ТекущаяОбласть.Текст);
СтрокаПриемник.Сумма = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Сумма).ТекущаяОбласть.Текст);
// письмерова 19.11.2024 BSLR-4095
СтрокаПриемник.СуммаДоплатыOzon = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СуммаДоплатыOzon).ТекущаяОбласть.Текст);
Если СтавкаНДССтрокой <> "" Тогда
СтавкаНДС = Число(СтрЗаменить(СтрЗаменить(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СтавкаНДС).ТекущаяОбласть.Текст, "%", ""), "Без НДС", "0"));
СтрокаПриемник.СтавкаНДСЗнач = ?(СтавкаНДС = 0, "Без НДС", Строка(СтавкаНДС) + "%");
СтрокаПриемник.НДС = СтрокаПриемник.Сумма / (100 + СтавкаНДС) * СтавкаНДС;
КонецЕсли;
КонецЕсли;
// письмерова 14.12.2023 BSLR-2680
СтрокаПриемник.НаименованиеПокупателя = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НаименованиеПокупателя).ТекущаяОбласть.Текст);
СтрокаПриемник.ИНН = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ИНН).ТекущаяОбласть.Текст);
СтрокаПриемник.КПП = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.КПП).ТекущаяОбласть.Текст);
СтрокаПриемник.ЮридическийАдресПокупателя = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ЮридическийАдресПокупателя).ТекущаяОбласть.Текст);
// Стрелкова Н. 08.04.26 BSLR-5296
Если ЭтоВозврат Тогда
НомерСчФактСтрокой = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НомерСчФактКор).ТекущаяОбласть.Текст);
ДатаСтрокой = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ДатаСчФактКор).ТекущаяОбласть.Текст);
Иначе
НомерСчФактСтрокой = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НомерСчФакт).ТекущаяОбласть.Текст);
ДатаСтрокой = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ДатаСчФакт).ТекущаяОбласть.Текст);
КонецЕсли;
// письмерова 18.09.2025 BSLR-4418
Если ЕстьРасширениеУПД Тогда
СтрокаПриемник.НомерСчФакт = НомерСчФактСтрокой;
Иначе
СтрокаПриемник.НомерСчФакт = Прав(НомерСчФактСтрокой,12);
КонецЕсли;
Если ДатаСтрокой <> "" Тогда
Год = Число(Прав(ДатаСтрокой,4));
Месяц = Число(Сред(ДатаСтрокой,4,2));
День = Число(Лев(ДатаСтрокой,2));
ДатаСчФакт = Дата(Год,Месяц,День);
СтрокаПриемник.ДатаСчФакт = ДатаСчФакт;
КонецЕсли;
// письмерова 29.04.2025 BSLR-4544
Если НЕ ЗначениеЗаполнено(СтрокаПриемник.НомерСчФакт) Тогда // проверим в другой колонке
// Стрелкова Н. 08.04.26 BSLR-5296
Если ЭтоВозврат Тогда
Попытка
НомерСчФактСтрокой = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НомерСчФактДопКор).ТекущаяОбласть.Текст);
Исключение
НомерСчФактСтрокой = "";
КонецПопытки;
Попытка
ДатаСтрокой = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ДатаСчФактДопКор).ТекущаяОбласть.Текст);
Исключение
ДатаСтрокой = "";
КонецПопытки;
Иначе
Попытка
НомерСчФактСтрокой = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НомерСчФактДоп).ТекущаяОбласть.Текст);
Исключение
НомерСчФактСтрокой = "";
КонецПопытки;
Попытка
ДатаСтрокой = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ДатаСчФактДоп).ТекущаяОбласть.Текст);
Исключение
ДатаСтрокой = "";
КонецПопытки;
КонецЕсли;
// письмерова 18.09.2025 BSLR-4418
Если ЕстьРасширениеУПД Тогда
СтрокаПриемник.НомерСчФакт = НомерСчФактСтрокой;
Иначе
СтрокаПриемник.НомерСчФакт = Прав(НомерСчФактСтрокой,12);
КонецЕсли;
Если ДатаСтрокой <> "" Тогда
Год = Число(Прав(ДатаСтрокой,4));
Месяц = Число(Сред(ДатаСтрокой,4,2));
День = Число(Лев(ДатаСтрокой,2));
ДатаСчФакт = Дата(Год,Месяц,День);
СтрокаПриемник.ДатаСчФакт = ДатаСчФакт;
КонецЕсли;
КонецЕсли;
// Стрелкова Н. 31.03.26 BSLR-5296
Если ЗначениеЗаполнено(СтрокаПриемник.ИНН) Тогда
СтрокаПриемник.ПродажаЮЛ = Истина;
КонецЕсли;
КонецПроцедуры
&НаСерверебезконтекста
Функция СоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков)
Результат = Новый Структура;
Результат.Вставить("Номер_Заказ", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Номер заказа"));
Результат.Вставить("ТипЗаказа", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Тип заказа"));
Результат.Вставить("Наименование", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Название товара"));
Если Не ЗначениеЗаполнено(Результат.Наименование) Тогда // BSLR-4525
Результат.Вставить("Наименование",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Название"));
КонецЕсли;
Если Не ЗначениеЗаполнено(Результат.Наименование) Тогда // письмерова 20.08.2025 BSLR-4676
Результат.Вставить("Наименование",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Наименование"));
КонецЕсли;
Результат.Вставить("Артикул", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Ваш SKU"));
Результат.Вставить("Количество",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Доставлено, шт."));
// Стрелкова Н. 08.04.26 BSLR-5296
Если Не ЗначениеЗаполнено(Результат.Количество) Тогда
Результат.Вставить("Количество",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Количество переданных в доставку, шт."));
КонецЕсли;
Результат.Вставить("КоличествоВозврат",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Не выкуплено, шт."));
Если Не ЗначениеЗаполнено(Результат.КоличествоВозврат) Тогда
Результат.Вставить("КоличествоВозврат",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Возвращено, шт."));
КонецЕсли;
Результат.Вставить("ТипОперации", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Статус заказа"));
Если Не ЗначениеЗаполнено(Результат.ТипОперации) Тогда // письмерова 16.07.2024 BSLR-3711
Результат.Вставить("ТипОперации",99);
КонецЕсли;
Результат.Вставить("ДатаЗаказа", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Дата оформления заказа"));
Результат.Вставить("СтавкаНДС", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Ставка НДС"));
Результат.Вставить("СтавкаНДСВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Ставка НДС"));
Результат.Вставить("Цена", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Цена с НДС с учётом всех скидок, руб. за шт."));
Результат.Вставить("ЦенаВозврат",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Цена с НДС с учётом всех скидок, руб. за шт."));
//Результат.Вставить("Сумма", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех доставленных штук с НДС с учётом всех скидок, руб."));
//Результат.Вставить("СуммаВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех невыкупленных штук с НДС с учётом всех скидок, руб."));
//Если Не ЗначениеЗаполнено(Результат.CуммаВозврат) Тогда
// Результат.Вставить("СуммаВозврат",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех возвращённых штук с НДС с учётом всех скидок, руб."));
//КонецЕсли;
// письмерова 14.12.2023 BSLR-2680
Результат.Вставить("НаименованиеПокупателя", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Наименование организации"));
Результат.Вставить("ИНН", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "ИНН"));
Результат.Вставить("КПП", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "КПП"));
Результат.Вставить("ЮридическийАдресПокупателя", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Юридический адрес"));
Результат.Вставить("ДатаСчФакт", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Дата УПД"));
Результат.Вставить("НомерСчФакт", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Номер УПД"));
// письмерова 19.11.2024 BSLR-4095
Результат.Вставить("СуммаДоплатыOzon", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Сумма всех скидок для доставленных штук, руб."));
Результат.Вставить("СуммаДоплатыOzonВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Сумма всех скидок для возвращённых штук, руб."));
// Стрелкова Н. 08.04.26 BSLR-5296
Если Не ЗначениеЗаполнено(Результат.СуммаДоплатыOzon) Тогда
Результат.Вставить("СуммаДоплатыOzon", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Сумма всех скидок для переданных в доставку штук, руб."));
КонецЕсли;
Если Не ЗначениеЗаполнено(Результат.СуммаДоплатыOzonВозврат) Тогда
Результат.Вставить("СуммаДоплатыOzonВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Сумма всех скидок для невыкупленных штук, руб."));
КонецЕсли;
// письмерова 07.04.2025 BSLR-4486
Если УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех доставленных штук с НДС с учётом всех скидок, руб.") <> Неопределено ТОгда
Результат.Вставить("Сумма",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех доставленных штук с НДС с учётом всех скидок, руб."));
КонецЕсли;
// Стрелкова Н. 08.04.26 BSLR-5296
Если УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех переданных в доставку штук с НДС с учётом всех скидок, руб.") <> Неопределено ТОгда
Результат.Вставить("Сумма",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех переданных в доставку штук с НДС с учётом всех скидок, руб."));
КонецЕсли;
Если УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех невыкупленных штук с НДС с учётом всех скидок, руб.") <> Неопределено ТОгда
Результат.Вставить("СуммаВозврат",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех невыкупленных штук с НДС с учётом всех скидок, руб."));
КонецЕсли;
Если УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех возвращённых штук с НДС с учётом всех скидок, руб.") <> Неопределено Тогда
Результат.Вставить("СуммаВозврат",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех возвращённых штук с НДС с учётом всех скидок, руб."));
КонецЕсли;
Если Не Результат.Свойство("Сумма") ТОгда
Результат.Вставить("Сумма", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех доставленных штук с НДС с учётом всех скидок, ₽"));
ИначеЕсли Не ЗначениеЗаполнено(Результат.Сумма) ТОгда
Результат.Вставить("Сумма", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех доставленных штук с НДС с учётом всех скидок, ₽"));
КонецЕсли;
// Стрелкова Н. 08.04.26 BSLR-5296
Если Не Результат.Свойство("Сумма") ТОгда
Результат.Вставить("Сумма", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех переданных в доставку штук с НДС с учётом всех скидок, ₽"));
ИначеЕсли Не ЗначениеЗаполнено(Результат.Сумма) ТОгда
Результат.Вставить("Сумма", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех переданных в доставку штук с НДС с учётом всех скидок, ₽"));
КонецЕсли;
Если Не Результат.Свойство("СуммаВозврат") ТОгда
Результат.Вставить("СуммаВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех возвращённых штук с НДС с учётом всех скидок, ₽"));
ИначеЕсли Не ЗначениеЗаполнено(Результат.СуммаВозврат) ТОгда
Результат.Вставить("СуммаВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех возвращённых штук с НДС с учётом всех скидок, ₽"));
КонецЕсли;
// Стрелкова Н. 08.04.26 BSLR-5296
Если Не Результат.Свойство("СуммаВозврат") ТОгда
Результат.Вставить("СуммаВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех невыкупленных штук с НДС с учётом всех скидок, ₽"));
ИначеЕсли Не ЗначениеЗаполнено(Результат.СуммаВозврат) ТОгда
Результат.Вставить("СуммаВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех невыкупленных штук с НДС с учётом всех скидок, ₽"));
КонецЕсли;
Если Не ЗначениеЗаполнено(Результат.СуммаДоплатыOzon) ТОгда
Результат.Вставить("СуммаДоплатыOzon", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Сумма всех скидок для доставленных штук, ₽"));
КонецЕсли;
// Стрелкова Н. 08.04.26 BSLR-5296
Если Не ЗначениеЗаполнено(Результат.СуммаДоплатыOzon) Тогда
Результат.Вставить("СуммаДоплатыOzon", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Сумма всех скидок для переданных в доставку штук, ₽"));
КонецЕсли;
Если Не ЗначениеЗаполнено(Результат.СуммаДоплатыOzonВозврат) ТОгда
Результат.Вставить("СуммаДоплатыOzonВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Сумма всех скидок для возвращённых штук, ₽"));
КонецЕсли;
// Стрелкова Н. 08.04.26 BSLR-5296
Если Не ЗначениеЗаполнено(Результат.СуммаДоплатыOzonВозврат) ТОгда
Результат.Вставить("СуммаДоплатыOzonВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Сумма всех скидок для невыкупленных штук, ₽"));
КонецЕсли;
Если Не ЗначениеЗаполнено(Результат.Цена) ТОгда
Результат.Вставить("Цена", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Цена с НДС с учётом всех скидок за шт., ₽"));
КонецЕсли;
Если Не ЗначениеЗаполнено(Результат.ЦенаВозврат) ТОгда
Результат.Вставить("ЦенаВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Цена с НДС с учётом всех скидок за шт., ₽"));
КонецЕсли;
// письмерова 29.04.2025 BSLR-4544
Результат.Вставить("ДатаСчФактДоп", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Дата счёта-фактуры"));
Результат.Вставить("НомерСчФактДоп", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Номер счёта фактуры"));
// Стрелкова Н. 08.04.26 BSLR-5296
Результат.Вставить("ДатаСчФактКор", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Дата УКД"));
Результат.Вставить("НомерСчФактКор", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Номер УКД"));
Результат.Вставить("ДатаСчФактДопКор", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Дата корректировочного счёта-фактуры"));
Результат.Вставить("НомерСчФактДопКор", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Номер корректировочного счёта фактуры"));
Возврат Результат;
КонецФункции
&НаСерверебезконтекста
Функция УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, СтрокаПоиска)
Для сч = 1 по 50 Цикл // письмерова BSLR-4544
Если СтрокаПоиска = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(СтрокаЗаголовков) + "C" + сч).ТекущаяОбласть.Текст) Тогда
Возврат сч;
Прервать;
КонецЕсли;
КонецЦикла;
КонецФункции
&НаСерверебезконтекста
Функция ПолучитьТаблицуЗагрузкиТоваровЯМ() Экспорт
КвалификаторыСтроки = Новый КвалификаторыСтроки(100);
КвалификаторыЧисла = Новый КвалификаторыЧисла(18,3);
ТипСтроки = Новый ОписаниеТипов("Строка" ,,,, КвалификаторыСтроки);
ТипЧисла = Новый ОписаниеТипов("Число" ,,, КвалификаторыЧисла );
ТипБулево = Новый ОписаниеТипов("Булево");
СписокТоваров = Новый ТаблицаЗначений;
СписокТоваров.Колонки.Добавить("НомерСтроки", ТипЧисла);
СписокТоваров.Колонки.Добавить("ИД_Заказ", ТипСтроки);
СписокТоваров.Колонки.Добавить("Номер_Заказ", ТипСтроки);
СписокТоваров.Колонки.Добавить("ТипЗаказа", ТипСтроки);
СписокТоваров.Колонки.Добавить("Наименование", ТипСтроки);
СписокТоваров.Колонки.Добавить("Артикул", ТипСтроки);
СписокТоваров.Колонки.Добавить("Количество", ТипЧисла);
СписокТоваров.Колонки.Добавить("ТипОперации", ТипСтроки);
СписокТоваров.Колонки.Добавить("ДатаЗаказа", ТипСтроки);
СписокТоваров.Колонки.Добавить("СтавкаНДСЗнач", ТипСтроки);
СписокТоваров.Колонки.Добавить("НДС", ТипЧисла);
СписокТоваров.Колонки.Добавить("Цена", ТипЧисла);
СписокТоваров.Колонки.Добавить("Сумма", ТипЧисла);
// письмерова 14.12.2023 BSLR-2680
СписокТоваров.Колонки.Добавить("НомерСчФакт", ТипСтроки);
СписокТоваров.Колонки.Добавить("ДатаСчФакт",Новый ОписаниеТипов("Дата" ,,,, Новый КвалификаторыДаты(ЧастиДаты.Дата)));
СписокТоваров.Колонки.Добавить("Покупатель");
СписокТоваров.Колонки.Добавить("НаименованиеПокупателя",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(250)));
СписокТоваров.Колонки.Добавить("ЮридическийАдресПокупателя",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(250)));
СписокТоваров.Колонки.Добавить("ИНН",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(15)));
СписокТоваров.Колонки.Добавить("КПП",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(15)));
// письмерова 19.11.2024 BSLR-4095
СписокТоваров.Колонки.Добавить("СуммаДоплатыOzon", ТипЧисла);
// Стрелкова Н. 31.03.26 BSLR-5296
СписокТоваров.Колонки.Добавить("ПродажаЮЛ", ТипБулево);
Возврат СписокТоваров;
КонецФункции
// письмерова 19.07.2023 BSLR-2097 - услуги ЯМ
&НаКлиенте
Процедура ЗагрузитьУслугиИзExcel(Команда)
Если Объект.Услуги.Количество() Тогда
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопросОбОчищенииТаблицыЯМ", ЭтаФорма);
ПоказатьВопрос(ОписаниеОповещения, "Таблица услуг содержит данные. Очистить?", РежимДиалогаВопрос.ДаНетОтмена);
иначе
ВыполнитьЗагрузкуЧерезФайлУслигиЯМ();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеОтветаНаВопросОбОчищенииТаблицыЯМ(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Отмена Тогда
Возврат;
КонецЕсли;
Если Результат = КодВозвратаДиалога.Да Тогда
Объект.Услуги.Очистить();
КонецЕсли;
ВыполнитьЗагрузкуЧерезФайлУслигиЯМ();
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьЗагрузкуЧерезФайлУслигиЯМ(ЭтоПродвижение = Ложь)
Попытка
НачатьПомещениеФайлаНаСервер(Новый ОписаниеОповещения("ВыполнитьЗагрузкуУслугиЯМ",ЭтаФорма,ЭтоПродвижение),,,,,новый УникальныйИдентификатор);
Исключение
ОбщегоНазначенияКлиент.СообщитьПользователю("Не получилось открыть файл. Скорее всего он уже открыт на вашем компьютере");
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьЗагрузкуУслугиЯМ(Результат,ЭтоПродвижение) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
РасширениеФайла = Результат.СсылкаНаФайл.Расширение;
РезультатВыполнения = ЗагрузитьУслугиИзExcelНаСервере(Результат.Адрес, РасширениеФайла,ЭтоПродвижение);
УстановитьВидимостьДоступность(); // BSLR-5051
Если НЕ РезультатВыполнения.Ошибка Тогда
Если Не ЭтоПродвижение Тогда
Если Объект.ДатаНачала < Дата(2024,10,1) ТОгда // письмерова 20.11.2024 BSLR-4095, файл продвижения отменен с 01.10.2024
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопросОЗагрузкеУслугПродвижения", ЭтаФорма);
ПоказатьВопрос(ОписаниеОповещения, "Для загрузки услуг по договору на продвижение требуется выбрать Детализацию. Загрузить?", РежимДиалогаВопрос.ДаНет);
КонецЕсли;//BSLR-4095
КонецЕсли;
Иначе
Сообщить(РезультатВыполнения.Сообщение);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ЗагрузитьУслугиИзExcelНаСервере(Знач Адрес, Расширение,ЭтоПродвижение)
Результат = Новый Структура("Ошибка, Сообщение", Ложь, "");
ПерваяСтрока = 0;
ФайлВременногоХранилища = ПолучитьИзВременногоХранилища(Адрес);
ИмяФайла = ПолучитьИмяВременногоФайла(Расширение);
ЕстьДанныеОтправления = Ложь;
Попытка
ФайлВременногоХранилища.Записать(ИмяФайла);
Исключение
УдалитьИзВременногоХранилища(Адрес);
Результат.Ошибка = Истина;
Результат.Сообщение = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());//"Ошибка при загрузке файла, повторите попытку";
Возврат Результат;
КонецПопытки;
УдалитьИзВременногоХранилища(Адрес);
MXL = Новый ТабличныйДокумент;
MXL.Прочитать(ИмяФайла);
Файл = Новый Файл(ИмяФайла);
Если Файл.Существует() Тогда
УдалитьФайлы(ИмяФайла);
КонецЕсли;
MXLОбщая = MXL;
// письмерова 19.11.2024 BSLR-4095
ИдМагазина = ?(Объект.ЛичныйКабинет.ID_ПартнераЯМ_ЗагрузкаОК = "", Объект.ЛичныйКабинет.ID_ПартнераЯМ, Объект.ЛичныйКабинет.ID_ПартнераЯМ_ЗагрузкаОК);
Если Не ЭтоПродвижение Тогда // загрузка первого файла
ТаблицаУслуг = ПолучитьТаблицуЗагрузкиУслугЯМ();
Если MXLОбщая.Области.Найти("Сводка") <> Неопределено Тогда
MXL = MXLОбщая.ПолучитьОбласть("Сводка");
КоличествоСтрок = MXL.ВысотаТаблицы;
КоличествоКолонок = MXL.ШиринаСтраницы;
Для ТекущаяСтрока = 1 По КоличествоСтрок Цикл
Для ТекущаяКолонка = 1 По КоличествоКолонок Цикл
ТекстЯчейки = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + ТекущаяКолонка).ТекущаяОбласть.Текст);
Если СтрНайти(ТекстЯчейки, "Сводка бизнеса по стоимости услуг") <> 0 Тогда
ПерваяСтрока = ТекущаяСтрока + 3;
КонецЕсли;
Если ЗначениеЗаполнено(ПерваяСтрока) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Если ПерваяСтрока = 0 Тогда
Результат.Ошибка = Истина;
ОбщегоНазначения.СообщитьПользователю("Выбран не тот документ, выберите в личном кабинете Бухгалтерия → Финансовые отчеты → По стоимости услуг");
Возврат Результат;
КонецЕсли;
Иначе
Результат.Ошибка = Истина;
ОбщегоНазначения.СообщитьПользователю("Выбран не тот документ, выберите в личном кабинете Бухгалтерия → Финансовые отчеты → По стоимости услуг");
Возврат Результат;
КонецЕсли;
НомераКолонокФайла = СоответствиеКолонокФайлаЗагрузкиУслугЯМ(MXL, ПерваяСтрока-1);
Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок Цикл
Если СтрНайти(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C1").ТекущаяОбласть.Текст), "Итого:") <> 0 Тогда
Прервать; // конец таблицы
КонецЕсли;
// проверка на ИД магазина
Если СокрЛП(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C3").ТекущаяОбласть.Текст)) <> ИдМагазина ТОгда
Продолжить; // данные по другому магазину
КонецЕсли;
Для Каждого Колонка из НомераКолонокФайла Цикл
Если Колонка.Значение = Неопределено Тогда // письмерова 06.09.2023 BSLR-2551
Продолжить;
КонецЕсли;
Сумма = Число(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + Колонка.Значение).ТекущаяОбласть.Текст);
ЛитералУслуги = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ПерваяСтрока-1) + "C" + Колонка.Значение).ТекущаяОбласть.Текст);
Если Сумма = 0 Тогда
Продолжить; // нулевые не выводим
КонецЕсли;
НоваяСтрока = ТаблицаУслуг.Добавить();
ЛитералУслуги = СтрЗаменить(ЛитералУслуги,", руб.","");
ЛитералУслуги = СтрЗаменить(ЛитералУслуги,", ₽",""); // письерова 19.03.2024 BSLR-3371
НоваяСтрока.ЛитералУслуги = ЛитералУслуги;
НоваяСтрока.Сумма = Сумма;
КонецЦикла;
КонецЦикла;
Если ТаблицаУслуг.Количество() Тогда
// дозаполнение таблицы данными об услуге ТП и сопоставленной номенклатуре
Запрос = Новый запрос("ВЫБРАТЬ
| тз.ЛитералУслуги КАК ЛитералУслуги,
| тз.Сумма КАК Сумма
|ПОМЕСТИТЬ ВТ_ТЗ
|ИЗ
| &тз КАК тз
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_ТЗ.ЛитералУслуги КАК НаименованиеМП,
| ВТ_ТЗ.Сумма КАК Сумма,
| топ_СопоставлениеНоменклатурыУслуг.НоменклатураУслуги КАК Номенклатура,
| топ_СопоставлениеНоменклатурыУслуг.УслугаМП КАК УслугаМП,
| топ_СопоставлениеНоменклатурыУслуг.УслугаМП.СтавкаНДС КАК СтавкаНДС,
| топ_СопоставлениеНоменклатурыУслуг.УслугаМП.Наименование КАК Наименование
|ИЗ
| ВТ_ТЗ КАК ВТ_ТЗ
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.топ_СопоставлениеНоменклатурыУслуг КАК топ_СопоставлениеНоменклатурыУслуг
| ПО ВТ_ТЗ.ЛитералУслуги = топ_СопоставлениеНоменклатурыУслуг.ЛитералУслуги
|ГДЕ
// письмерова 13.02.2024 BSLR-3230
| ВЫБОР
| КОГДА топ_СопоставлениеНоменклатурыУслуг.ТорговаяПлощадка ЕСТЬ NULL
| ТОГДА ИСТИНА
| ИНАЧЕ топ_СопоставлениеНоменклатурыУслуг.ТорговаяПлощадка = &ТорговаяПлощадка
| КОНЕЦ");
Запрос.УстановитьПараметр("тз",ТаблицаУслуг);
Запрос.УстановитьПараметр("ТорговаяПлощадка", Перечисления.топ_ТорговыеПлощадки.ЯндексМаркет);
ВремТабл = Запрос.Выполнить().Выгрузить();
//Объект.Услуги.Очистить(); - т.к. услуга комиссии приходит с загрузки товаров BSLR-4195
Для Каждого Стр из ВремТабл Цикл
нСтр = Объект.Услуги.Добавить();
ЗаполнитьЗначенияСвойств(нСтр,Стр);
// письмерова 13.02.2024 BSLR-3230 - новая услуга
Если НЕ ЗначениеЗаполнено(нСтр.УслугаМП) Тогда
УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоРеквизиту("ЛитералУслуги", Стр.НаименованиеМП);
Если УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.ПустаяСсылка() Тогда // нет элемента справочника УслугиМП
Перечень = Новый соответствие;
Перечень.Вставить(Стр.НаименованиеМП,Стр.НаименованиеМП);
ПереченьНДС = Новый соответствие;
ПереченьНДС.Вставить(Стр.НаименованиеМП,"20%");
топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.СоздатьЭлементыНоменклатурыУслугМП(Перечень,ПереченьНДС,
Перечисления.топ_ТорговыеПлощадки.ЯндексМаркет,
Неопределено);
УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоРеквизиту("ЛитералУслуги", Стр.НаименованиеМП);
Конецесли;
нСтр.УслугаМП = УслугаМП;
нСтр.Наименование = УслугаМП.Наименование;
нСтр.Номенклатура = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьНоменклатуруДопУслугиМП(Перечисления.топ_ТорговыеПлощадки.ЯндексМаркет, УслугаМП);
КонецЕсли;
Если НЕ ЗначениеЗаполнено(нСтр.Номенклатура) тогда
Перечень = Новый соответствие;
Перечень.Вставить(Стр.НаименованиеМП,Стр.НаименованиеМП);
ПереченьНДС = Новый соответствие;
ПереченьНДС.Вставить(Стр.НаименованиеМП,"20%");
топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.СоздатьЭлементыНоменклатурыУслугМП(Перечень,ПереченьНДС,
Перечисления.топ_ТорговыеПлощадки.ЯндексМаркет,
Неопределено);
УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоРеквизиту("ЛитералУслуги", Стр.НаименованиеМП);
нСтр.УслугаМП = УслугаМП;
нСтр.Наименование = УслугаМП.Наименование;
нСтр.Номенклатура = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьНоменклатуруДопУслугиМП(Перечисления.топ_ТорговыеПлощадки.ЯндексМаркет, УслугаМП);
КонецЕсли;
СтавкаНДС = нСтр.Номенклатура.СтавкаНДС;
нСтр.СтавкаНДС = СтавкаНДС;
ЗначСтавки = топ_ОбщийВызовСервера. БИТ_ПолучитьЗначениеСтавкиНДС(СтавкаНДС);
нСтр.СуммаНДС = нСтр.Сумма * ЗначСтавки/ (ЗначСтавки + 100) ;
КонецЦикла;
Иначе // письмерова 12.02.2024 BSLR-3230
Сообщить("Не найдены совпадения по ID магазина или в файле нулевые значения услуг.
|Убедитесь, что в настройках личного кабинета на вкладке ""Отчет комиссионера"" заполнено поле ""ID магазина (для загрузки финансовых отчетов)"",
|и загружаемый файл относится к бизнес-аккаунту, указанному в личном кабинете.");
КонецЕсли;
Иначе // заполнение услуг продвижения, второй файл
Если MXLОбщая.Области.Найти("Скидки_маркетплейса") <> Неопределено
И MXLОбщая.Области.Найти("Баллы_Яндекс_Плюса") <> Неопределено Тогда
ПерваяСтрока = 0;
MXL = MXLОбщая.ПолучитьОбласть("Скидки_маркетплейса");
КоличествоСтрок = MXL.ВысотаТаблицы;
КоличествоКолонок = MXL.ШиринаСтраницы;
Для ТекущаяСтрока = 1 По КоличествоСтрок Цикл
Для ТекущаяКолонка = 1 По КоличествоКолонок Цикл
ТекстЯчейки = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + ТекущаяКолонка).ТекущаяОбласть.Текст);
Если СтрНайти(ТекстЯчейки, "ИТОГО") <> 0 Тогда
ПерваяСтрока = ТекущаяСтрока + 1;
КонецЕсли;
Если ЗначениеЗаполнено(ПерваяСтрока) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Если ПерваяСтрока = 0 Тогда
Результат.Ошибка = Истина;
ОбщегоНазначения.СообщитьПользователю("Выбран не тот документ, выберите в личном кабинете Сведённый отчёт по акту об оказанных услугах по продвижению маркетплейса за период");
Возврат Результат;
КонецЕсли;
СуммаУслугАкция = 0;
Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок Цикл
// проверка на ИД магазина
Если СокрЛП(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C3").ТекущаяОбласть.Текст)) <> ИдМагазина ТОгда
Продолжить; // данные по другому магазину
КонецЕсли;
СуммаУслугАкция = СуммаУслугАкция + Число(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C18").ТекущаяОбласть.Текст); // письмерова 12.08.2024 BSLR-3775
КонецЦикла;
Если СуммаУслугАкция <> 0 Тогда
НоваяСтрока = Объект.Услуги.Добавить();
НоваяСтрока.НаименованиеМП = "Продвижение в рамках Акций";
НоваяСтрока.Сумма = - СуммаУслугАкция;
Данные = ПолучитьДанныеОбУслугеПоЛитералу(НоваяСтрока.НаименованиеМП);
НоваяСтрока.Номенклатура = Данные.Номенклатура;
НоваяСтрока.УслугаМП = Данные.УслугаМП;
НоваяСтрока.Наименование = Данные.Номенклатура.Наименование;
Если НоваяСтрока.Номенклатура <> Справочники.Номенклатура.ПустаяСсылка() Тогда
НоваяСтрока.СтавкаНДС = НоваяСтрока.Номенклатура.СтавкаНДС;
ЗначСтавки = топ_ОбщийВызовСервера. БИТ_ПолучитьЗначениеСтавкиНДС(НоваяСтрока.Номенклатура.СтавкаНДС);
НоваяСтрока.СуммаНДС = НоваяСтрока.Сумма * ЗначСтавки/ (ЗначСтавки + 100) ;
КонецЕсли;
КонецЕсли;
ПерваяСтрока = 0;
MXL = MXLОбщая.ПолучитьОбласть("Баллы_Яндекс_Плюса");
КоличествоСтрок = MXL.ВысотаТаблицы;
КоличествоКолонок = MXL.ШиринаСтраницы;
Для ТекущаяСтрока = 1 По КоличествоСтрок Цикл
Для ТекущаяКолонка = 1 По КоличествоКолонок Цикл
ТекстЯчейки = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + ТекущаяКолонка).ТекущаяОбласть.Текст);
Если СтрНайти(ТекстЯчейки, "ИТОГО") <> 0 Тогда
ПерваяСтрока = ТекущаяСтрока + 1;
КонецЕсли;
Если ЗначениеЗаполнено(ПерваяСтрока) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Если ПерваяСтрока = 0 Тогда
Результат.Ошибка = Истина;
ОбщегоНазначения.СообщитьПользователю("Выбран не тот документ, выберите в личном кабинете Сведённый отчёт по акту об оказанных услугах по продвижению маркетплейса за период");
Возврат Результат;
КонецЕсли;
СуммаУслугБаллы = 0;
Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок Цикл
// проверка на ИД магазина
Если СокрЛП(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C3").ТекущаяОбласть.Текст)) <> ИдМагазина ТОгда
Продолжить; // данные по другому магазину
КонецЕсли;
СуммаУслугБаллы = СуммаУслугБаллы + Число(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C18").ТекущаяОбласть.Текст); // письмерова 12.08.2024 BSLR-3775
КонецЦикла;
Если СуммаУслугБаллы <> 0 Тогда
НоваяСтрока = Объект.Услуги.Добавить();
НоваяСтрока.НаименованиеМП = "Продвижение Яндекс.Плюс Кэшбэк";
НоваяСтрока.Сумма = - СуммаУслугБаллы;
Данные = ПолучитьДанныеОбУслугеПоЛитералу(НоваяСтрока.НаименованиеМП);
НоваяСтрока.Номенклатура = Данные.Номенклатура;
НоваяСтрока.УслугаМП = Данные.УслугаМП;
НоваяСтрока.Наименование = Данные.Номенклатура.Наименование;
Если НоваяСтрока.Номенклатура <> Справочники.Номенклатура.ПустаяСсылка() Тогда
НоваяСтрока.СтавкаНДС = НоваяСтрока.Номенклатура.СтавкаНДС;
ЗначСтавки = топ_ОбщийВызовСервера. БИТ_ПолучитьЗначениеСтавкиНДС(НоваяСтрока.Номенклатура.СтавкаНДС);
НоваяСтрока.СуммаНДС = НоваяСтрока.Сумма * ЗначСтавки/ (ЗначСтавки + 100) ;
КонецЕсли;
КонецЕсли;
// письмерова 06.09.2023 BSLR-2551
Если СуммаУслугБаллы = 0 или СуммаУслугАкция = 0 Тогда
Сообщить("Для ID партнера " + Строка(ИдМагазина) + "в файле либо отсутствуют данные по услугам, либо их сумма равна 0. Подробнее в справке");
КонецЕсли;
Иначе
Результат.Ошибка = Истина;
ОбщегоНазначения.СообщитьПользователю("Выбран не тот документ, выберите в личном кабинете Сведённый отчёт по акту об оказанных услугах по продвижению маркетплейса за период");
Возврат Результат;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСерверебезконтекста
Функция ПолучитьТаблицуЗагрузкиУслугЯМ() Экспорт
КвалификаторыСтроки = Новый КвалификаторыСтроки(100);
КвалификаторыЧисла = Новый КвалификаторыЧисла(18,3);
ТипСтроки = Новый ОписаниеТипов("Строка" ,,,, КвалификаторыСтроки);
ТипЧисла = Новый ОписаниеТипов("Число" ,,, КвалификаторыЧисла );
ТаблицаУслуг = Новый ТаблицаЗначений;
ТаблицаУслуг.Колонки.Добавить("ЛитералУслуги", ТипСтроки );
ТаблицаУслуг.Колонки.Добавить("Сумма", ТипЧисла);
Возврат ТаблицаУслуг;
КонецФункции
&НаСерверебезконтекста
Функция СоответствиеКолонокФайлаЗагрузкиУслугЯМ(MXL, СтрокаЗаголовков)
// письерова 19.03.2024 BSLR-3371
Результат = Новый Структура;
Результат.Вставить("РазмещениеТоваров", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Размещение товаров на витрине, руб."));
Если Результат.РазмещениеТоваров = Неопределено или Результат.РазмещениеТоваров = 0 Тогда
Результат.РазмещениеТоваров = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Размещение товаров на витрине, ₽");
КонецЕсли;
Результат.Вставить("СкладскаяОбработка", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Складская обработка, руб."));
Если Результат.СкладскаяОбработка = Неопределено или Результат.СкладскаяОбработка = 0 Тогда
Результат.СкладскаяОбработка = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Складская обработка, ₽");
КонецЕсли;
Результат.Вставить("ПрограммаЛояльности", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Программа лояльности и отзывы, руб."));
Если Результат.ПрограммаЛояльности = Неопределено или Результат.ПрограммаЛояльности = 0 Тогда
Результат.ПрограммаЛояльности = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Программа лояльности и отзывы, ₽");
КонецЕсли;
Результат.Вставить("БустПоказы", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Буст продаж, оплата за показы, ₽")); // письмерова 13.08.2024 BSLR-3759
Результат.Вставить("Буст", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Буст продаж, руб."));
Если Результат.Буст = Неопределено или Результат.Буст = 0 Тогда
Результат.Буст = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Буст продаж, ₽");
КонецЕсли;
Результат.Вставить("Рассрочка",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Рассрочка, руб."));
Если Результат.Рассрочка = Неопределено или Результат.Рассрочка = 0 Тогда
Результат.Рассрочка = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Рассрочка, ₽");
КонецЕсли;
Результат.Вставить("Полки",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Полки, руб.")); // письмерова 06.09.2023 BSLR-2551
Если Результат.Полки = Неопределено или Результат.Полки = 0 Тогда
Результат.Полки = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Полки, ₽");
КонецЕсли;
Результат.Вставить("Доставка",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Доставка покупателю, руб."));
Если Результат.Доставка = Неопределено или Результат.Доставка = 0 Тогда
Результат.Доставка = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Доставка покупателю, ₽");
КонецЕсли;
Результат.Вставить("ЭкспрессДоставка",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Экспресс-доставка покупателю, руб."));
Если Результат.ЭкспрессДоставка = Неопределено или Результат.ЭкспрессДоставка = 0 Тогда
Результат.ЭкспрессДоставка = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Экспресс-доставка покупателю, ₽");
КонецЕсли;
Результат.Вставить("ПриемПлатежа", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Приём платежа покупателя, руб."));
Если Результат.ПриемПлатежа = Неопределено или Результат.ПриемПлатежа = 0 Тогда
Результат.ПриемПлатежа = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Приём платежа покупателя, ₽");
КонецЕсли;
Результат.Вставить("ПереводПлатежа", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Перевод платежа покупателя, руб."));
Если Результат.ПереводПлатежа = Неопределено или Результат.ПереводПлатежа = 0 Тогда
Результат.ПереводПлатежа = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Перевод платежа покупателя, ₽");
КонецЕсли;
Результат.Вставить("ПлатноеХранение", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Платное хранение, руб."));
Если Результат.ПлатноеХранение = Неопределено или Результат.ПлатноеХранение = 0 Тогда
Результат.ПлатноеХранение = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Платное хранение, ₽");
КонецЕсли;
Результат.Вставить("ТранзитныйСклад", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Поставка товаров через транзитный склад, руб."));
Если Результат.ТранзитныйСклад = Неопределено или Результат.ТранзитныйСклад = 0 Тогда
Результат.ТранзитныйСклад = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Поставка товаров через транзитный склад, ₽");
КонецЕсли;
Результат.Вставить("ПриемИзлишков", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Приём излишков на складе, руб."));
Если Результат.ПриемИзлишков = Неопределено или Результат.ПриемИзлишков = 0 Тогда
Результат.ПриемИзлишков = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Приём излишков на складе, ₽");
КонецЕсли;
Результат.Вставить("ВывозСоСклада",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Вывоз со склада, СЦ, ПВЗ, руб."));
Если Результат.ВывозСоСклада = Неопределено или Результат.ВывозСоСклада = 0 Тогда
Результат.ВывозСоСклада = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Вывоз со склада, СЦ, ПВЗ, ₽");
КонецЕсли;
Результат.Вставить("ОбработкаЗаказа", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Обработка заказа, руб."));
Если Результат.ОбработкаЗаказа = Неопределено или Результат.ОбработкаЗаказа = 0 Тогда
Результат.ОбработкаЗаказа = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Обработка заказа, ₽");
КонецЕсли;
// письмерова 12.02.2024 BSLR-3230
Если Результат.ОбработкаЗаказа = Неопределено или Результат.ОбработкаЗаказа = 0 Тогда
Результат.ОбработкаЗаказа = УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Обработка заказов в СЦ или ПВЗ, руб.");
Если Результат.ОбработкаЗаказа = Неопределено или Результат.ОбработкаЗаказа = 0 Тогда
Результат.ОбработкаЗаказа = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Обработка заказов в СЦ или ПВЗ, ₽");
КонецЕсли;
КонецЕсли;
Результат.Вставить("ХранениеНевыкупов", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Хранение невыкупов и возвратов, руб."));
Если Результат.ХранениеНевыкупов = Неопределено или Результат.ХранениеНевыкупов = 0 Тогда
Результат.ХранениеНевыкупов = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Хранение невыкупов и возвратов, ₽");
КонецЕсли;
Результат.Вставить("ОрганизацияУтилизации",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Организация утилизации, руб."));
Если Результат.ОрганизацияУтилизации = Неопределено или Результат.ОрганизацияУтилизации = 0 Тогда
Результат.ОрганизацияУтилизации = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Организация утилизации, ₽");
КонецЕсли;
Результат.Вставить("ДоступКСервисам",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Расширенный доступ к сервисам Маркетплейса, руб."));
Если Результат.ДоступКСервисам = Неопределено или Результат.ДоступКСервисам = 0 Тогда
Результат.ДоступКСервисам = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Расширенный доступ к сервисам Маркетплейса, ₽");
КонецЕсли;
// письмерова 12.02.2024 BSLR-3230
Результат.Вставить("Баннеры",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Баннеры, руб."));
Если Результат.Баннеры = Неопределено или Результат.Баннеры = 0 Тогда
Результат.Баннеры = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Баннеры, ₽");
КонецЕсли;
Результат.Вставить("ОбработкаЗаказов",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Обработка заказов на складе, руб."));
Если Результат.ОбработкаЗаказов = Неопределено или Результат.ОбработкаЗаказов = 0 Тогда
Результат.ОбработкаЗаказов = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Обработка заказов на складе, ₽");
КонецЕсли;
Результат.Вставить("ОрганизацияЗабораЗаказов",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Организация забора заказов, руб."));
Если Результат.ОрганизацияЗабораЗаказов = Неопределено или Результат.ОрганизацияЗабораЗаказов = 0 Тогда
Результат.ОрганизацияЗабораЗаказов = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Организация забора заказов, ₽");
КонецЕсли;
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура ПослеОтветаНаВопросОЗагрузкеУслугПродвижения(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Нет Тогда
Возврат;
КонецЕсли;
ВыполнитьЗагрузкуЧерезФайлУслигиЯМ(Истина);
КонецПроцедуры
&НаСерверебезконтекста
Функция ПолучитьДанныеОбУслугеПоЛитералу(ЛитералУслуги)
Результат = Новый Структура("Номенклатура, УслугаМП",
Справочники.Номенклатура.ПустаяСсылка(),
Справочники.топ_УслугиТорговыхПлощадок.ПустаяСсылка());
Запрос = Новый Запрос("ВЫБРАТЬ
| топ_СопоставлениеНоменклатурыУслуг.НоменклатураУслуги КАК Номенклатура,
| топ_СопоставлениеНоменклатурыУслуг.УслугаМП КАК УслугаМП
|ИЗ
| РегистрСведений.топ_СопоставлениеНоменклатурыУслуг КАК топ_СопоставлениеНоменклатурыУслуг
|ГДЕ
| топ_СопоставлениеНоменклатурыУслуг.ЛитералУслуги = &ЛитералУслуги");
Запрос.УстановитьПараметр("ЛитералУслуги",ЛитералУслуги);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Результат.Номенклатура = Выборка.Номенклатура;
Результат.УслугаМП = Выборка.УслугаМП;
КонецЕсли;
Возврат Результат;
КонецФункции
// письмерова 31.01.2025 BSLR-4195
&НаСервере
Процедура ВыделитьСкидкиВОтдельнуюУслугуЯМ()
СуммаУслуги = 0;
Для Каждого Стр из Объект.Товары Цикл
СуммаУслуги = СуммаУслуги + Стр.СуммаДоплатыOzon;
КонецЦикла;
Если СуммаУслуги <> 0 Тогда
УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоРеквизиту("ЛитералУслуги", "Возмещение скидок");
Если УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.ПустаяСсылка() Тогда
// создаем услугу и номенклатуру
Перечень = Новый соответствие;
Перечень.Вставить("Возмещение скидок","Возмещение суммы скидок при продаже товаров");
ПереченьНДС = Новый соответствие;
ПереченьНДС.Вставить("Возмещение скидок","Без НДС");
топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.СоздатьЭлементыНоменклатурыУслугМП(Перечень,ПереченьНДС,
Перечисления.топ_ТорговыеПлощадки.ЯндексМаркет,
Неопределено);
КонецЕсли;
УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоРеквизиту("ЛитералУслуги", "Возмещение скидок");
НоваяУслуга = Объект.Услуги.Добавить();
НоваяУслуга.УслугаМП = УслугаМП;
НоваяУслуга.Наименование = УслугаМП.Наименование;
НоваяУслуга.НаименованиеМП = УслугаМП.ЛитералУслуги;
НоваяУслуга.Сумма = СуммаУслуги;
НоваяУслуга.Номенклатура = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьНоменклатуруДопУслугиМП(Перечисления.топ_ТорговыеПлощадки.ЯндексМаркет, УслугаМП);
Если ЗначениеЗаполнено(НоваяУслуга.Номенклатура) тогда
НоваяУслуга.СтавкаНДС = "Без НДС";
Иначе
Перечень = Новый соответствие;
Перечень.Вставить("Возмещение скидок","Возмещение суммы скидок при продаже товаров");
ПереченьНДС = Новый соответствие;
ПереченьНДС.Вставить("Возмещение скидок","Без НДС");
топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.СоздатьЭлементыНоменклатурыУслугМП(Перечень,ПереченьНДС,
Перечисления.топ_ТорговыеПлощадки.ЯндексМаркет,
Неопределено);
УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоРеквизиту("ЛитералУслуги", "Возмещение скидок");
НоваяУслуга.Номенклатура = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьНоменклатуруДопУслугиМП(Перечисления.топ_ТорговыеПлощадки.ЯндексМаркет, УслугаМП);
НоваяУслуга.СтавкаНДС = "Без НДС";
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#конецОбласти
#Область ЗагрузкаИзЭксельСбер
&НаСервере
Функция ЗагрузитьНаСервереСберМегаМаркет(Знач Адрес, Расширение, ЭтоВыкупы)
Результат = Новый Структура("Ошибка, Сообщение, СписокТоваров, СписокУслуг",
Ложь, "", Новый Массив, Новый Массив);
ПерваяСтрока = 0;
ЕстьДанныеОтправления = Ложь;
ФайлВременногоХранилища = ПолучитьИзВременногоХранилища(Адрес);
ИмяФайла = ПолучитьИмяВременногоФайла(Расширение);
Попытка
ФайлВременногоХранилища.Записать(ИмяФайла);
Исключение
Результат.Ошибка = Истина;
Результат.Сообщение = "Ошибка при загрузке файла, повторите попытку";
Возврат Результат;
КонецПопытки;
УдалитьИзВременногоХранилища(Адрес);
Архив = Новый ЧтениеZipФайла(ИмяФайла);
ВремКаталог = КаталогВременныхФайлов();
// очистка Temp
Попытка
УдалитьФайлы(ВремКаталог,"*.csv");
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Попытка
УдалитьФайлы(ВремКаталог,"*.pdf");
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
//BSLR-3639, Чупраков А.Н., 01.07.24, расширение файлов в архиве указано в верхнем регистре, некоторые сервера чувствительны к регистру
Попытка
УдалитьФайлы(ВремКаталог,"*.CSV");
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Попытка
УдалитьФайлы(ВремКаталог,"*.PDF");
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Архив.ИзвлечьВсе(ВремКаталог,РежимВосстановленияПутейФайловZIP.Восстанавливать);
// Распакуем файлы по одиночке.
Для Каждого Элемент Из Архив.Элементы Цикл
Архив.Извлечь(Элемент, ВремКаталог,
РежимВосстановленияПутейФайловZIP.Восстанавливать,"");
КонецЦикла;
Таблица = Новый ТаблицаЗначений;
ТаблицаИТОГОВАЯ = ПолучитьТаблицуЗагрузкиТоваровСбер();
Разделитель = ";";
// нужны только файлы csv
//BSLR-3639, Чупраков А.Н., 01.07.24, проверка, не нашел *.csv, ищем срасщирением в верхнем регистре *.CSV
НайденныеФайлы = НайтиФайлы(ВремКаталог, "*.csv");
Если НайденныеФайлы.Количество() = 0 Тогда
НайденныеФайлы = НайтиФайлы(ВремКаталог, "*.CSV");
КонецЕсли;
// письмерова 04.07.2025 BSLR-4440 - поменяли формат файлов, вместо csv теперь xls
Формат_XLS = Ложь;
Если НайденныеФайлы.Количество() = 0 Тогда // файлы в новом формате
ЗагрузитьНаСервереСберМегаМаркет_XLS(ВремКаталог, ТаблицаИТОГОВАЯ, ЭтоВыкупы);
Формат_XLS = Истина;
Иначе // старый формат CSV
МассивКодов = Новый Массив;
// ++ Бойков BSLR-3406
Оператору = 0;
АкцииМерчанта = 0;
ОператоруЗаАкции = 0;
// -- Бойков BSLR-3406
#Область Загрузка_CSV
Для Каждого Файл_объект из НайденныеФайлы Цикл
Найден = Ложь;
Если СтрНайти(Файл_объект.Имя, "Приложение1")> 0 Тогда
//Таблица = Таблица1;
Найден = Истина;
КонецЕсли;
Если СтрНайти(Файл_объект.Имя, "Приложение4а")> 0 Тогда
//Таблица = Таблица4а;
Найден = Истина;
КонецЕсли;
Если СтрНайти(Файл_объект.Имя, "Приложение4б")> 0 Тогда
//Таблица = Таблица4б;
Найден = Истина;
КонецЕсли;
Если СтрНайти(Файл_объект.Имя, "Отчет по программе лояльнос")> 0 Тогда
//Таблица = Таблица4б;
Найден = Истина;
КонецЕсли;
Если Не Найден Тогда // обрабатываем не все файлы из архива
Продолжить;
КонецЕсли;
ЗагружаемыйФайл = Новый ТекстовыйДокумент;
ЗагружаемыйФайл.Прочитать(Файл_объект.ПолноеИмя);
//шапка по умолчанию первая строчка
Шапка = ЗагружаемыйФайл.ПолучитьСтроку(1);
НомерСтр=2;
Если СтрНайти(Файл_объект.Имя, "Отчет по программе лояльнос")> 0 Тогда
Шапка = ЗагружаемыйФайл.ПолучитьСтроку(10);
НомерСтр=11;
КонецЕсли;
//раскладываем строку в массив
МассивКол = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Шапка,Разделитель); // процедура из типовой конфигурации, разбивает строку в массив по разделителям
Таблица.Колонки.Очистить();
//генерируем столбцы
н = 1;
КоличествоКолонок = 0;
Для Каждого ИмяСтолбца Из МассивКол Цикл
ИмяБезПробелов = СтрЗаменить(СтрЗаменить(СтрЗаменить(СокрЛП(ИмяБезПробелов),Символы.Таб,""),Символы.НПП,""),Символы.Таб, "");
ИмяБезПробелов = СтрЗаменить(СтрЗаменить(СтрЗаменить(ИмяСтолбца," ",""), ".",""),",","");
ИмяБезПробелов = СтрЗаменить(ИмяБезПробелов, "№", "номер_");
ИмяБезПробелов = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(ИмяБезПробелов, "(", ""),")", ""),"""", ""),"/","");
ИмяБезПробелов = СтрЗаменить(СтрЗаменить(СтрЗаменить(СокрЛП(ИмяБезПробелов),Символы.Таб,""),Символы.НПП,""),Символы.Таб, "");
Если ИмяБезПробелов = "" Тогда
Продолжить;
КонецЕсли;
Если Таблица.Колонки.Найти(ИмяБезПробелов) <> Неопределено Тогда // в файлах колонки с одинаковыми названиями
ИмяБезПробелов = ИмяБезПробелов + Строка(н);
н = н + 1;
КонецЕсли;
Таблица.Колонки.Добавить(ИмяБезПробелов,,ИмяСтолбца);
КоличествоКолонок = КоличествоКолонок + 1;
КонецЦикла;
// обнуляем индексы колонок, т.к. файлы имеют различную структуру
НомерКолонки_НомерОтправления = Неопределено;
НомерКолонки_НомерОперации = Неопределено;
НомерКолонки_Артикул = Неопределено;
НомерКолонки_Количество = Неопределено;
НомерКолонки_СтоимостьТовара = Неопределено;
НомерКолонки_СуммаКВыплате = Неопределено;
НомерКолонки_Комиссия = Неопределено;
НомерКолонки_ТипОперации = Неопределено;
НомерКолонки_СуммаКВыплатеИтог = Неопределено;
НомерКолонки_Бонусы = Неопределено;
НомерКолонки_СберСпасибо = Неопределено;
// идентификация значимых номеров колонок
Индекс = -1;
ОплеченоНайден = ложь;
Для Каждого Кол из Таблица.Колонки Цикл
Индекс = Индекс + 1;
Если СтрНайти(Врег(Кол.Заголовок), Врег("Номер Отправления Маркетплейс")) Тогда //BSLR-3729, Чупраков А.Н., 29.07.24
НомерКолонки_НомерОтправления = Индекс;
КонецЕсли;
Если СтрНайти(Кол.Заголовок, "Номер Позиции Отправления") > 0 Тогда
НомерКолонки_НомерОперации = Индекс;
КонецЕсли;
Если СтрНайти(Кол.Заголовок, "Артикул") > 0 Или
СтрНайти(Кол.Заголовок, "Код товара Продавца") > 0 Тогда
НомерКолонки_Артикул = Индекс;
КонецЕсли;
Если СтрНайти(Кол.Заголовок, "Количество") > 0 Тогда
НомерКолонки_Количество = Индекс;
КонецЕсли;
Если СтрНайти(Кол.Заголовок, "Стоимость товара") > 0 Тогда
НомерКолонки_СтоимостьТовара = Индекс;
КонецЕсли;
Если СтрНайти(Кол.Заголовок, "Стоимость оплаченных и доставленных товаров") > 0 Тогда
НомерКолонки_СуммаКВыплате = Индекс;
КонецЕсли;
Если СтрНайти(Кол.Заголовок, "услуг") > 0 Тогда
НомерКолонки_Комиссия = Индекс;
КонецЕсли;
Если СтрНайти(Кол.Заголовок, "Статус") > 0 Тогда
НомерКолонки_ТипОперации = Индекс;
КонецЕсли;
Если СтрНайти(Кол.Заголовок, "Оплачено") > 0 Тогда
Если НЕ ОплеченоНайден Тогда
НомерКолонки_СуммаКВыплатеИтог = Индекс;
ОплеченоНайден = истина;
КонецЕсли;
КонецЕсли;
Если СтрНайти(Кол.Заголовок, "Статус") > 0 Тогда
НомерКолонки_ТипОперации = Индекс;
КонецЕсли;
//программа лояльности
Если СтрНайти(Кол.Заголовок, "Сумма использованных Участником бонусных рублей") > 0 Тогда
НомерКолонки_Бонусы = Индекс;
КонецЕсли;
Если СтрНайти(Кол.Заголовок, "СберСпасибо") > 0 Тогда
НомерКолонки_СберСпасибо = Индекс;
КонецЕсли;
// расходы по программе лояльности
Если СтрНайти(Кол.Заголовок, "Сумма вознаграждения оператора за приобретенны") > 0 Тогда
НомерКолонки_Оператору = Индекс;
КонецЕсли;
Если СтрНайти(Кол.Заголовок, "Сумма по дополнительным акциям мерчанта") > 0 Тогда
НомерКолонки_АкцииМерчанта = Индекс;
КонецЕсли;
Если СтрНайти(Кол.Заголовок, "Сумма вознаграждения оператора по дополнительным акциям мерчанта") > 0 Тогда
НомерКолонки_ОператоруЗаАкции = Индекс;
КонецЕсли;
КонецЦикла;
Если ЭтоВыкупы ТОгда
ТаблицаЗаказовМП = ПолучитьТаблицуЗаказовСНомерамиОтправлений();
КонецЕсли;
Оператору = 0;
АкцииМерчанта = 0;
ОператоруЗаАкции = 0;
ВозвратыЛояльности = Ложь;
Для НомерСтроки=НомерСтр по ЗагружаемыйФайл.КоличествоСтрок() Цикл
// получить стрoку с указанным номером и преобразуем её в массив
Строка = ЗагружаемыйФайл.ПолучитьСтроку(НомерСтроки);
МассивКол = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Строка,Разделитель);
Если СокрЛП(МассивКол[0]) = "" Тогда // пустая строка между шапкой и таблицей
Продолжить;
КонецЕсли;
Если СтрНайти(Файл_объект.Имя, "Приложение1")> 0 Тогда // основная таблица продаж
нСтр = ТаблицаИТОГОВАЯ.Добавить();
Если НомерКолонки_НомерОтправления <> Неопределено Тогда
нСтр.НомерОтправления = МассивКол[НомерКолонки_НомерОтправления]; КонецЕсли;
Если НомерКолонки_НомерОперации <> Неопределено Тогда
нСтр.НомерОперации = МассивКол[НомерКолонки_НомерОперации]; КонецЕсли;
Если НомерКолонки_Артикул <> Неопределено Тогда
нСтр.Артикул = МассивКол[НомерКолонки_Артикул]; КонецЕсли;
Если НомерКолонки_Количество <> Неопределено Тогда
нСтр.Количество = МассивКол[НомерКолонки_Количество]; КонецЕсли;
Если НомерКолонки_СуммаКВыплате <> Неопределено Тогда
нСтр.СуммаКВыплате = МассивКол[НомерКолонки_СуммаКВыплате];
нСтр.Сумма = МассивКол[НомерКолонки_СуммаКВыплате]; КонецЕсли;
Если НомерКолонки_Комиссия <> Неопределено Тогда
нСтр.Комиссия = МассивКол[НомерКолонки_Комиссия]; КонецЕсли;
Если НомерКолонки_ТипОперации <> Неопределено Тогда
нСтр.ТипОперации = МассивКол[НомерКолонки_ТипОперации]; КонецЕсли;
нСтр.Цена = нСтр.Сумма/?(нСтр.Количество=0,1,нСтр.Количество);
Иначе // нужно найти нужную строку и добавить сумму комиссии
Если НЕ ЭтоВыкупы ТОгда
НайтиСтроку = ТаблицаИТОГОВАЯ.НайтиСтроки(Новый Структура("НомерОтправления",МассивКол[НомерКолонки_НомерОтправления]));
Если НайтиСтроку.Количество() Тогда
нСтр = НайтиСтроку[0];
Если СтрНайти(Файл_объект.Имя, "Приложение4а")> 0 или СтрНайти(Файл_объект.Имя, "Приложение4б")> 0 Тогда
нСтр.ЛогистикаСортировка = нСтр.ЛогистикаСортировка + МассивКол[НомерКолонки_Комиссия];
КонецЕсли;
КонецЕсли;
Иначе // догрузим данные по программе лояльности
// в файле лояльности может быть инфо по позвратам прошлого периода
Если СтрНайти(Строка,"Возврат прошлых периодов (справочно)")>0 Тогда
ВозвратыЛояльности = истина;
ПРодолжить;// возвраты прошлых периодов нам не нужны??
КонецЕсли;
Если ВозвратыЛояльности ТОгда
Если СтрНайти(Строка,"№ пп")>0 Тогда
//шапка возвратов
ПРодолжить;
КонецЕсли;
КонецЕсли;
Если НЕ ВозвратыЛояльности ТОгда
НайтиСтроку = Объект.Товары.НайтиСтроки(Новый Структура("ЗаказПокупателяМП,Артикул",МассивКол[НомерКолонки_НомерОтправления],МассивКол[НомерКолонки_Артикул]));
Если НайтиСтроку.Количество() Тогда
нСтр = НайтиСтроку[0];
Если НомерКолонки_Бонусы <> Неопределено Тогда
нСтр.СуммаДоплатыOzon = нСтр.СуммаДоплатыOzon + ?(МассивКол[НомерКолонки_Бонусы] = "",0,МассивКол[НомерКолонки_Бонусы]); КонецЕсли;
Если НомерКолонки_СберСпасибо <> Неопределено Тогда
нСтр.СуммаДоплатыOzon = нСтр.СуммаДоплатыOzon + ?(МассивКол[НомерКолонки_СберСпасибо] = "",0,МассивКол[НомерКолонки_СберСпасибо]); КонецЕсли;
// расходы
Если НомерКолонки_Оператору <> Неопределено Тогда
Оператору = Оператору + ?(МассивКол[НомерКолонки_Оператору] = "",0,МассивКол[НомерКолонки_Оператору]);
нСтр.ВознаграждениеОператору = нСтр.ВознаграждениеОператору + ?(МассивКол[НомерКолонки_Оператору] = "",0,МассивКол[НомерКолонки_Оператору]); КонецЕсли;
Если НомерКолонки_АкцииМерчанта <> Неопределено Тогда
АкцииМерчанта = АкцииМерчанта + ?(МассивКол[НомерКолонки_АкцииМерчанта] = "",0,МассивКол[НомерКолонки_АкцииМерчанта]);
нСтр.ВознаграждениеОператору = нСтр.ВознаграждениеОператору + ?(МассивКол[НомерКолонки_АкцииМерчанта] = "",0,МассивКол[НомерКолонки_АкцииМерчанта]); КонецЕсли;
Если НомерКолонки_ОператоруЗаАкции <> Неопределено Тогда
ОператоруЗаАкции = ОператоруЗаАкции + ?(МассивКол[НомерКолонки_ОператоруЗаАкции] = "",0,МассивКол[НомерКолонки_ОператоруЗаАкции]);
нСтр.ВознаграждениеОператору = нСтр.ВознаграждениеОператору + ?(МассивКол[НомерКолонки_ОператоруЗаАкции] = "",0,МассивКол[НомерКолонки_ОператоруЗаАкции]); КонецЕсли;
Иначе // в таблице заказ МП, а не номер отправления, найдем заказ мп с номером отправления
НайтиСтрокуЗаказМП = ТаблицаЗаказовМП.найтиСтроки(Новый Структура("НомерОтправления,Артикул",МассивКол[НомерКолонки_НомерОтправления],МассивКол[НомерКолонки_Артикул]));
Если НайтиСтрокуЗаказМП.Количество() Тогда
ЗаказМП = НайтиСтрокуЗаказМП[0].ЗаказМП;
НайтиСтроку = Объект.Товары.НайтиСтроки(Новый Структура("ЗаказПокупателяМП",ЗаказМП));
Если НайтиСтроку.Количество() Тогда
нСтр = НайтиСтроку[0];
Если НомерКолонки_Бонусы <> Неопределено Тогда
нСтр.СуммаДоплатыOzon = нСтр.СуммаДоплатыOzon + ?(МассивКол[НомерКолонки_Бонусы] = "",0,МассивКол[НомерКолонки_Бонусы]); КонецЕсли;
Если НомерКолонки_СберСпасибо <> Неопределено Тогда
нСтр.СуммаДоплатыOzon = нСтр.СуммаДоплатыOzon + ?(МассивКол[НомерКолонки_СберСпасибо] = "",0,МассивКол[НомерКолонки_СберСпасибо]); КонецЕсли;
// расходы
Если НомерКолонки_Оператору <> Неопределено Тогда
Оператору = Оператору + ?(МассивКол[НомерКолонки_Оператору] = "",0,МассивКол[НомерКолонки_Оператору]);
нСтр.ВознаграждениеОператору = нСтр.ВознаграждениеОператору + ?(МассивКол[НомерКолонки_Оператору] = "",0,МассивКол[НомерКолонки_Оператору]); КонецЕсли;
Если НомерКолонки_АкцииМерчанта <> Неопределено Тогда
АкцииМерчанта = АкцииМерчанта + ?(МассивКол[НомерКолонки_АкцииМерчанта] = "",0,МассивКол[НомерКолонки_АкцииМерчанта]);
нСтр.ВознаграждениеОператору = нСтр.ВознаграждениеОператору + ?(МассивКол[НомерКолонки_АкцииМерчанта] = "",0,МассивКол[НомерКолонки_АкцииМерчанта]); КонецЕсли;
Если НомерКолонки_ОператоруЗаАкции <> Неопределено Тогда
ОператоруЗаАкции = ОператоруЗаАкции + ?(МассивКол[НомерКолонки_ОператоруЗаАкции] = "",0,МассивКол[НомерКолонки_ОператоруЗаАкции]);
нСтр.ВознаграждениеОператору = нСтр.ВознаграждениеОператору + ?(МассивКол[НомерКолонки_ОператоруЗаАкции] = "",0,МассивКол[НомерКолонки_ОператоруЗаАкции]); КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Иначе // данные о возвратах
нСтр = Объект.Товары.Добавить();
Если НомерКолонки_НомерОтправления <> Неопределено Тогда
нСтр.ЗаказПокупателяМП = МассивКол[НомерКолонки_НомерОтправления]; КонецЕсли;
Если НомерКолонки_Артикул <> Неопределено Тогда
нСтр.Артикул = МассивКол[НомерКолонки_Артикул]; КонецЕсли;
Если НомерКолонки_Количество <> Неопределено Тогда
нСтр.Количество = МассивКол[НомерКолонки_Количество]; КонецЕсли;
Если НомерКолонки_СуммаКВыплате <> Неопределено Тогда
нСтр.СуммаКВыплате = МассивКол[НомерКолонки_СуммаКВыплате];
нСтр.Сумма = МассивКол[НомерКолонки_СуммаКВыплате]; КонецЕсли;
Если НомерКолонки_Комиссия <> Неопределено Тогда
нСтр.Комиссия = МассивКол[НомерКолонки_Комиссия]; КонецЕсли;
нСтр.ТипОперации = "Возврат";
//
Если НомерКолонки_Бонусы <> Неопределено Тогда
нСтр.СуммаДоплатыOzon = нСтр.СуммаДоплатыOzon + ?(МассивКол[НомерКолонки_Бонусы] = "",0,МассивКол[НомерКолонки_Бонусы]); КонецЕсли;
Если НомерКолонки_СберСпасибо <> Неопределено Тогда
нСтр.СуммаДоплатыOzon = нСтр.СуммаДоплатыOzon + ?(МассивКол[НомерКолонки_СберСпасибо] = "",0,МассивКол[НомерКолонки_СберСпасибо]); КонецЕсли;
// расходы
Если НомерКолонки_Оператору <> Неопределено Тогда
Оператору = Оператору + ?(МассивКол[НомерКолонки_Оператору] = "",0,МассивКол[НомерКолонки_Оператору]);
нСтр.ВознаграждениеОператору = нСтр.ВознаграждениеОператору + ?(МассивКол[НомерКолонки_Оператору] = "",0,МассивКол[НомерКолонки_Оператору]); КонецЕсли;
Если НомерКолонки_АкцииМерчанта <> Неопределено Тогда
АкцииМерчанта = АкцииМерчанта + ?(МассивКол[НомерКолонки_АкцииМерчанта] = "",0,МассивКол[НомерКолонки_АкцииМерчанта]);
нСтр.ВознаграждениеОператору = нСтр.ВознаграждениеОператору + ?(МассивКол[НомерКолонки_АкцииМерчанта] = "",0,МассивКол[НомерКолонки_АкцииМерчанта]); КонецЕсли;
Если НомерКолонки_ОператоруЗаАкции <> Неопределено Тогда
ОператоруЗаАкции = ОператоруЗаАкции + ?(МассивКол[НомерКолонки_ОператоруЗаАкции] = "",0,МассивКол[НомерКолонки_ОператоруЗаАкции]);
нСтр.ВознаграждениеОператору = нСтр.ВознаграждениеОператору + ?(МассивКол[НомерКолонки_ОператоруЗаАкции] = "",0,МассивКол[НомерКолонки_ОператоруЗаАкции]); КонецЕсли;
МассивКодов.Добавить(нСтр.Артикул);
КонецЕсли; // возвраты лояльности
КонецЕсли; // лояльность
КонецЕсли; // не первичная таблица, не приложение 1
КонецЦикла;
Сообщить("обработан файл " + Файл_объект.Имя);
КонецЦикла;
#КонецОбласти
// очистка Temp
Попытка
УдалитьФайлы(ВремКаталог,"*.csv");
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Попытка
УдалитьФайлы(ВремКаталог,"*.pdf");
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Попытка // BSLR-4440
УдалитьФайлы(ВремКаталог,"*.xls");
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Попытка
УдалитьФайлы(ВремКаталог,"*.CSV");
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Попытка
УдалитьФайлы(ВремКаталог,"*.PDF");
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Попытка // BSLR-4440
УдалитьФайлы(ВремКаталог,"*.XLS");
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЕсли; // BSLR-4440
Если Не ЭтоВыкупы ТОгда // первичная загрузка данных о продажах
Если ТаблицаИТОГОВАЯ.Количество() Тогда
ТаблицаУслуг = ОбработатьТаблицуУслугСбер(ТаблицаИТОГОВАЯ,Формат_XLS);
ТаблицаТоваров = ОбработатьТаблицуТоваровСбер(ТаблицаИТОГОВАЯ);
Результат.СписокТоваров = ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаТоваров);
Результат.СписокУслуг = ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаУслуг);
ДанныеЗагрузки = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьДанныеИзВыгрузки(Результат, Маркетплейс, Объект.ЛичныйКабинет, Истина, Объект.ДатаОкончания);
Если ДанныеЗагрузки.Ошибка Тогда
Результат.Ошибка = Истина;
Результат.Сообщение = Результат.Сообщение;
Возврат Результат;
КонецЕсли;
// получить признак набора для номенклатуры
Если Константы.ИспользоватьНаборы.Получить() Тогда
ДанныеЗагрузки.Товары = топ_ОбщийВызовСервера.ДополнитьДаннымиНаборов(ДанныеЗагрузки.Товары);
КонецЕсли;
Результат.Вставить("Товары", топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ТаблицаЗначенийВМассив(ДанныеЗагрузки.Товары));
Результат.Вставить("Услуги", топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ТаблицаЗначенийВМассив(ДанныеЗагрузки.Услуги));
КонецЕсли;
Иначе // загрузка данных о программе лояльности
Если не Формат_XLS ТОгда // BSLR-4440
Для Каждого Стр Из Объект.Товары Цикл
Стр.СуммаКВыплате = Стр.СуммаКВыплате + Стр.СуммаДоплатыOzon;
// письмерова 20.01.2025 BSLR-4190
СтавкаНДСЗнач = топ_ОбщийВызовСервера.БИТ_ПолучитьЗначениеСтавкиНДС(топ_ОбщийВызовСервера.ПолучитьСтавкуНДСПоИдентификатору(Стр.СтавкаНДС));
Стр.СуммаНДС = Стр.СуммаКВыплате * СтавкаНДСЗнач / (100 + СтавкаНДСЗнач);
КонецЦикла;
// добавить услуги в таб часть
ДополнитьТаблицуУслугСбер(Оператору,АкцииМерчанта,ОператоруЗаАкции);
// дополнить данными о товарах и номенклатуре для возвратов, если они есть
ДополнитьДаннымиСбер(МассивКодов);
Иначе // пересчет суммы и ндс // BSLR-4440
Для Каждого Стр из Объект.Товары Цикл
// Письмерова 15.01.2026 BSLR-5168 ++
Если Объект.ЛичныйКабинет.ЗагружатьВыплатыПоМеханикамЛояльностиВУслугу ТОгда
Стр.СуммаКВыплате = Стр.Сумма - Стр.СуммаДоплатыOzon;
Иначе
Стр.СуммаКВыплате = Стр.Сумма;
КонецЕсли; // BSLR-5168 --
СтавкаНДСЗнач = топ_ОбщийВызовСервера.БИТ_ПолучитьЗначениеСтавкиНДС(топ_ОбщийВызовСервера.ПолучитьСтавкуНДСПоИдентификатору(Стр.СтавкаНДС));
Стр.СуммаНДС = Стр.СуммаКВыплате * СтавкаНДСЗнач / (100 + СтавкаНДСЗнач);
КонецЦикла;
// добавление услуи по баллам СберСпасибо
// Письмерова 15.01.2026 BSLR-5168
Если Объект.ЛичныйКабинет.ЗагружатьВыплатыПоМеханикамЛояльностиВУслугу ТОгда
loyalty_program_reward = Объект.Товары.Итог("СуммаДоплатыOzon"); // выставляем Сберу расходную накл
СтрокаУслуг = Объект.Услуги.Добавить();
СтрокаУслуг.УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоРеквизиту("ЛитералУслуги","loyalty_program_reward");
СтрокаУслуг.Наименование = СтрокаУслуг.УслугаМП.Наименование;
СтрокаУслуг.НаименованиеМП = СтрокаУслуг.УслугаМП.ЛитералУслуги;
СтрокаУслуг.Номенклатура = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьНоменклатуруДопУслугиМП(Перечисления.топ_ТорговыеПлощадки.СберМегаМаркет, СтрокаУслуг.УслугаМП);
СтавкаНДС = топ_ОбщийВызовСервера.БИТ_СтавкаНДС_Номенклатуры(СтрокаУслуг.Номенклатура,ОБъект.ЛичныйКабинет,Период.ДатаОкончания);
СтавкаНДСЗнач = топ_ОбщийВызовСервера.БИТ_ПолучитьЗначениеСтавкиНДС(СтавкаНДС);
СтрокаУслуг.СтавкаНДС = Строка(СтавкаНДС);
СтрокаУслуг.Сумма = - loyalty_program_reward;
СтрокаУслуг.СуммаНДС = СтрокаУслуг.Сумма * СтавкаНДСЗнач / (100+СтавкаНДСЗнач);
КонецЕсли; // BSLR-5168
КонецЕсли;
КонецЕсли;
// ++ Бойков BSLR-3406
Если Не Результат.Свойство("Товары") Тогда
Результат.Вставить("Товары", Новый Массив);
КонецЕсли;
Если Не Результат.Свойство("Услуги") Тогда
Результат.Вставить("Услуги", Новый Массив);
КонецЕсли;
// -- Бойков BSLR-3406
Возврат Результат;
КонецФункции
// письмерова 04.07.2025 BSLR-4440
&НаСервере
Процедура ЗагрузитьНаСервереСберМегаМаркет_XLS(ВремКаталог, ТаблицаИТОГОВАЯ, ЭтоЛояльность)
НайденныеФайлы = НайтиФайлы(ВремКаталог, "*.xls");
Если НайденныеФайлы.Количество() = 0 Тогда
НайденныеФайлы = НайтиФайлы(ВремКаталог, "*.XLS");
КонецЕсли;
Для Каждого Файл_объект из НайденныеФайлы Цикл
Найден = Ложь;
Если СтрНайти(Файл_объект.Имя, "Отчет по отправлениям без расшифровки")> 0 Тогда
Продолжить; // файл не нужен
КонецЕсли;
Если СтрНайти(Файл_объект.Имя, "Отчет по отправлениям")> 0 Тогда
Найден = Истина;
КонецЕсли;
Если СтрНайти(Файл_объект.Имя, "Отчет по программе лояльности без расшифровки")> 0 Тогда
Продолжить; // файл не нужен
КонецЕсли;
Если СтрНайти(Файл_объект.Имя, "Отчет по программе лояльнос")> 0 Тогда
Найден = Истина;
КонецЕсли;
Если Не Найден Тогда // обрабатываем не все файлы из архива
Продолжить;
КонецЕсли;
MXL = Новый ТабличныйДокумент;
MXL.Прочитать(Файл_объект.ПолноеИмя);
Файл = Новый Файл(Файл_объект.ПолноеИмя);
Если Файл.Существует() Тогда
УдалитьФайлы(Файл_объект.ПолноеИмя);
КонецЕсли;
КоличествоСтрок = MXL.ВысотаТаблицы;
КоличествоКолонок = MXL.ШиринаСтраницы;
Для ТекущаяСтрока = 1 По КоличествоСтрок Цикл
Для ТекущаяКолонка = 1 По КоличествоКолонок Цикл
ТекстЯчейки = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + ТекущаяКолонка).ТекущаяОбласть.Текст);
Если СтрНайти(ТекстЯчейки,"Номер заказа") > 0 Тогда
Если ЭтоЛояльность ТОгда // загрузка продаж
ПерваяСтрока = ТекущаяСтрока + 2;
Иначе
ПерваяСтрока = ТекущаяСтрока + 1;
КонецЕсли;
Если ЗначениеЗаполнено(ПерваяСтрока) Тогда
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Если ЭтоЛояльность ТОгда // загрузка продаж
НомераКолонокФайла = СоответствиеКолонокФайлаЗагрузкиСбер(MXL, ПерваяСтрока - 2);
Иначе
НомераКолонокФайла = СоответствиеКолонокФайлаЗагрузкиСбер(MXL, ПерваяСтрока - 1);
КонецЕсли;
КомиссияЛояльность = 0; //BSLR-4440
Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок Цикл
Если Не ЭтоЛояльность ТОгда
Артикул = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.Артикул).ТекущаяОбласть.Текст);
НомерОТправления = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.НомерОтправления).ТекущаяОбласть.Текст);
Если (Артикул = "" и НомерОТправления = "") Или (Артикул = 0 и НомерОТправления = 0) Или (Артикул = "0" и НомерОТправления = "0") Тогда
Продолжить;
КонецЕсли;
ТипОперации = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.ТипОперации).ТекущаяОбласть.Текст);
ЭтоВозврат = ?(Врег(ТипОперации) = "ВОЗВРАТ", Истина, Ложь);
НоваяСтрока = ТаблицаИТОГОВАЯ.Добавить();
НоваяСтрока.ТипОперации = ТипОперации;
ЗаполнитьСтрокуТаблицыТоваровСбер(НоваяСтрока, MXL, ТекущаяСтрока, НомераКолонокФайла, ЭтоВозврат);
Иначе
ДозаполнитьСтрокуТоваровЛояльностьюСбер(MXL, ТекущаяСтрока, НомераКолонокФайла);
// BSLR-4440
XMLТекущаяСтрока = XMLСтрока(ТекущаяСтрока);
Если СтрНайти(Врег(MXL.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C11").ТекущаяОбласть.Текст),"ИТОГО") > 0 Тогда
Продолжить;
КонецЕсли;
Попытка ИтоговаяСуммаУдержаний = Число(MXL.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ИтоговаяСуммаУдержаний).ТекущаяОбласть.Текст);
Исключение ИтоговаяСуммаУдержаний = 0; КонецПопытки;
КомиссияЛояльность = КомиссияЛояльность + ИтоговаяСуммаУдержаний;
КонецЕсли;
КонецЦикла;
// BSLR-4440
Если ЭтоЛояльность и КомиссияЛояльность <> 0 ТОгда
НДСДопУслуг = топ_РаботаСМаркетплейсами_СберМегаМаркет.ПолучитьНДСДопУслугМП();
СтрокаУслуг = Объект.Услуги.Добавить();
СтрокаУслуг.Наименование = "За техническое, консалтинговое, информационное и маркетинговое сопровождение участия Продавца в Программе лояльности";
СтрокаУслуг.НаименованиеМП = "transaction_support";
СтрокаУслуг.УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоРеквизиту("ЛитералУслуги","transaction_support");
СтрокаУслуг.Номенклатура = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьНоменклатуруДопУслугиМП(Перечисления.топ_ТорговыеПлощадки.СберМегаМаркет, СтрокаУслуг.УслугаМП);
СтрокаУслуг.СтавкаНДС = НДСДопУслуг["transaction_support"];
СтавкаНДСЗнач = топ_ОбщийВызовСервера.БИТ_ПолучитьЗначениеСтавкиНДС(топ_ОбщийВызовСервера.ПолучитьСтавкуНДСПоИдентификатору(СтрокаУслуг.СтавкаНДС ));
СтрокаУслуг.Сумма = КомиссияЛояльность;
СтрокаУслуг.СуммаНДС = СтрокаУслуг.Сумма * СтавкаНДСЗнач / (100+СтавкаНДСЗнач);
КонецЕсли;
КонецЦикла; // найденые файлы
КонецПроцедуры
&НаСерверебезконтекста
Функция СоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков)
Результат = Новый Структура;
Результат.Вставить("НомерОтправления", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "Номер заказа"));
Результат.Вставить("Артикул", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "Код товара"));
Результат.Вставить("Бренд", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "Бренд"));
Результат.Вставить("ДатаЗаказа", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "Дата заказа"));
Результат.Вставить("Категория", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "Категория"));
Результат.Вставить("Цена", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "Стоимость товара"));
Результат.Вставить("ТипОперации", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "Статус отправления"));
// продажи
Результат.Вставить("Количество", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "Количество"));
Результат.Вставить("Комиссия", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "Сумма с НДС"));
Результат.Вставить("ЗаПродажу", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "За продажу",,1));
Результат.Вставить("ЗаОбработкуПлатежей", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "За обработку платежей",,1));
Результат.Вставить("ЗаПереносДатыОтгрузки", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "За перенос даты отгрузки",,1));
Результат.Вставить("ЗаОтказ", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "За отказ",,1));
Результат.Вставить("ЗаЛогистику", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "За логистику",,1));
Результат.Вставить("ЗаДоставкуДоПокупателя", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "За доставку до покупателя",,1));
Результат.Вставить("ЗаОбработкуВозврата", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "За обработку возврата",,1));
Результат.Вставить("ЗаЛогистикуВозврата", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "За логистику возврата",,1));
// лояльность
Результат.Вставить("СберСпасибо", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "Бонусы СберСпасибо",,2));
Результат.Вставить("Прочее", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "Прочее",,2));
Результат.Вставить("СуммаНачисленныхБонусныхРублей", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "Сумма начисленных бонусных рублей покупателю"));
Результат.Вставить("ЗаСчетИсполнителя", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "За счет исполнителя (базовые начисления)",,1));
Результат.Вставить("КомиссияЗаказчикаПовышенныйКэшбэк", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "Комиссия заказчика за повышенный кэшбэк",,1));
Результат.Вставить("КомиссияЗаказчикаБазовыеНачисления", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "Комиссия заказчика по базовым начислениям"));
Результат.Вставить("ИтоговаяСуммаУдержаний", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "Итоговая сумма удержаний"));
Возврат Результат;
КонецФункции
&НаСерверебезконтекста
Функция УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, СтрокаПоиска, НачальноеСмещение = 0, СмещениеПоСтроке = 0)
НачальныйИндекс = 1 + НачальноеСмещение;
Для сч = НачальныйИндекс по 50 Цикл
Если СтрНайти(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(СтрокаЗаголовков + СмещениеПоСтроке) + "C" + сч).ТекущаяОбласть.Текст), СтрокаПоиска) <> 0 Тогда
Возврат сч;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат 0;
КонецФункции
&НаСервере
Процедура ЗаполнитьСтрокуТаблицыТоваровСбер(СтрокаПриемник, ТабличныйДокумент, ТекущаяСтрока, НомераКолонокФайла, ЭтоВозврат = Ложь)
XMLТекущаяСтрока = XMLСтрока(ТекущаяСтрока);
СтрокаПриемник.НомерОтправления = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НомерОтправления).ТекущаяОбласть.Текст);
СтрокаПриемник.Артикул = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Артикул).ТекущаяОбласть.Текст);
СтрокаПриемник.Цена = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Цена).ТекущаяОбласть.Текст);
СтрокаПриемник.Количество = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Количество).ТекущаяОбласть.Текст);
СтрокаПриемник.Комиссия = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Комиссия).ТекущаяОбласть.Текст);
Если ЭтоВозврат ТОгда
СтрокаПриемник.Количество = -1 *СтрокаПриемник.Количество;
// СтрокаПриемник.Комиссия = -1 *СтрокаПриемник.Комиссия; - есть комиссия за возврат
КонецЕсли;
СтрокаПриемник.Сумма = СтрокаПриемник.Количество * СтрокаПриемник.Цена;
СтрокаПриемник.Идентификатор = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НомерОтправления).ТекущаяОбласть.Текст);
// услуги
// письмерова 14.07.2025 BSLR-4440
СтрокаПриемник.ЗаПродажу = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ЗаПродажу).ТекущаяОбласть.Текст);
СтрокаПриемник.ЗаОбработкуПлатежей = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ЗаОбработкуПлатежей).ТекущаяОбласть.Текст);
СтрокаПриемник.ЗаПереносДатыОтгрузки = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ЗаПереносДатыОтгрузки).ТекущаяОбласть.Текст);
СтрокаПриемник.ЗаОтказ = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ЗаОтказ).ТекущаяОбласть.Текст);
СтрокаПриемник.ЗаЛогистику = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ЗаЛогистику).ТекущаяОбласть.Текст);
СтрокаПриемник.ЗаДоставкуДоПокупателя = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ЗаДоставкуДоПокупателя).ТекущаяОбласть.Текст);
СтрокаПриемник.ЗаОбработкуВозврата = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ЗаОбработкуВозврата).ТекущаяОбласть.Текст);
СтрокаПриемник.ЗаЛогистикуВозврата = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ЗаЛогистикуВозврата).ТекущаяОбласть.Текст);
КонецПроцедуры
&НаСервере
Процедура ДозаполнитьСтрокуТоваровЛояльностьюСбер(ТабличныйДокумент, ТекущаяСтрока, НомераКолонокФайла)
XMLТекущаяСтрока = XMLСтрока(ТекущаяСтрока);
НомерОтправления = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НомерОтправления).ТекущаяОбласть.Текст);
Артикул = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Артикул).ТекущаяОбласть.Текст);
Попытка
СберСпасибо = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СберСпасибо).ТекущаяОбласть.Текст);
Исключение СберСпасибо = 0; КонецПопытки;
Попытка // письмерова 24.07.2025 BSLR-4440
ПрочееСпасибо = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Прочее).ТекущаяОбласть.Текст);
Исключение ПрочееСпасибо = 0; КонецПопытки;
Если НомерОтправления <> "" ТОгда
НайтиСтроки = Объект.Товары.НайтиСтроки(новый Структура("Идентификатор",НомерОтправления));
Для Каждого Стр из НайтиСтроки Цикл
Если Стр.Артикул = Артикул Тогда
Стр.СуммаДоплатыOzon = Стр.СуммаДоплатыOzon + СберСпасибо + ПрочееСпасибо;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаСерверебезконтекста
Функция ПолучитьТаблицуЗагрузкиТоваровСбер() Экспорт
КвалификаторыСтроки = Новый КвалификаторыСтроки(100);
КвалификаторыЧисла = Новый КвалификаторыЧисла(18,3);
ТипСтроки = Новый ОписаниеТипов("Строка" ,,,, КвалификаторыСтроки);
ТипЧисла = Новый ОписаниеТипов("Число" ,,, КвалификаторыЧисла );
СписокТоваров = Новый ТаблицаЗначений;
СписокТоваров.Колонки.Добавить("НомерСтроки", ТипЧисла);
СписокТоваров.Колонки.Добавить("Артикул", ТипСтроки);
СписокТоваров.Колонки.Добавить("Количество", ТипЧисла);
СписокТоваров.Колонки.Добавить("Комиссия", ТипЧисла);
СписокТоваров.Колонки.Добавить("НомерОперации", ТипСтроки);
СписокТоваров.Колонки.Добавить("НомерОтправления", ТипСтроки);
СписокТоваров.Колонки.Добавить("Сумма", ТипЧисла);
СписокТоваров.Колонки.Добавить("ТипОперации", ТипСтроки);
СписокТоваров.Колонки.Добавить("Цена", ТипЧисла);
СписокТоваров.Колонки.Добавить("СуммаКВыплате", ТипЧисла);
СписокТоваров.Колонки.Добавить("СуммаКВыплатеИтог", ТипЧисла);
СписокТоваров.Колонки.Добавить("СуммаДоплатыOzon", ТипЧисла);
СписокТоваров.Колонки.Добавить("СберСпасибо", ТипЧисла);
СписокТоваров.Колонки.Добавить("СуммаВозмещения", ТипЧисла);
СписокТоваров.Колонки.Добавить("ЛогистикаСортировка", ТипЧисла); // таблица 4а,4б
СписокТоваров.Колонки.Добавить("Идентификатор", ТипСтроки); // BSLR-4440
// услуги
// письмерова 14.07.2025 BSLR-4440
СписокТоваров.Колонки.Добавить("ЗаПродажу", ТипЧисла);
СписокТоваров.Колонки.Добавить("ЗаОбработкуПлатежей", ТипЧисла);
СписокТоваров.Колонки.Добавить("ЗаПереносДатыОтгрузки", ТипЧисла);
СписокТоваров.Колонки.Добавить("ЗаОтказ", ТипЧисла);
СписокТоваров.Колонки.Добавить("ЗаЛогистику", ТипЧисла);
СписокТоваров.Колонки.Добавить("ЗаДоставкуДоПокупателя", ТипЧисла);
СписокТоваров.Колонки.Добавить("ЗаОбработкуВозврата", ТипЧисла);
СписокТоваров.Колонки.Добавить("ЗаЛогистикуВозврата", ТипЧисла);
// лояяльность
СписокТоваров.Колонки.Добавить("ИтоговаяСуммаУдержаний", ТипЧисла);
Возврат СписокТоваров;
КонецФункции
&НаСерверебезконтекста
Функция ОбработатьТаблицуУслугСбер(ТаблицаТоваров,Формат_XLS)
ТаблицаУслуг = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьТаблицу(Истина);
ПереченьДопУслуг = топ_РаботаСМаркетплейсами_СберМегаМаркет.ПолучитьПереченьДопУслугМП();
НДСДопУслуг = топ_РаботаСМаркетплейсами_СберМегаМаркет.ПолучитьНДСДопУслугМП();
СтруктураУслуг = Новый Соответствие;
komission = ТаблицаТоваров.Итог("Комиссия");
logistics_sorting = ТаблицаТоваров.Итог("ЛогистикаСортировка");
// письмерова 14.07.2025 BSLR-4440
For_Sale = ТаблицаТоваров.Итог("ЗаПРодажу");
For_Payment_Processing = ТаблицаТоваров.Итог("ЗаОбработкуПлатежей");
For_Postponement_of_Shipment_Date = ТаблицаТоваров.Итог("ЗаПереносДатыОтгрузки");
For_Refusal = ТаблицаТоваров.Итог("ЗаОтказ");
For_Logistics = ТаблицаТоваров.Итог("ЗаЛогистику");
For_Delivery_to_Buyer = ТаблицаТоваров.Итог("ЗаДоставкуДоПокупателя");
For_Return_Processing = ТаблицаТоваров.Итог("ЗаОбработкуВозврата");
For_Return_Logistics = ТаблицаТоваров.Итог("ЗаЛогистикуВозврата");
// письмерова 14.07.2025 BSLR-4440
Если НЕ Формат_XLS ТОгда // старая схема
СтруктураУслуг.Вставить("komission",komission);
СтруктураУслуг.Вставить("logistics_sorting", logistics_sorting);
Иначе
Если For_Sale <> 0 ТОгда
СтруктураУслуг.Вставить("For_Sale", For_Sale);
КонецЕсли;
Если For_Payment_Processing <> 0 ТОгда
СтруктураУслуг.Вставить("For_Payment_Processing", For_Payment_Processing);
КонецЕсли;
Если For_Postponement_of_Shipment_Date <> 0 ТОгда
СтруктураУслуг.Вставить("For_Postponement_of_Shipment_Date", For_Postponement_of_Shipment_Date);
КонецЕсли;
Если For_Refusal <> 0 ТОгда
СтруктураУслуг.Вставить("For_Refusal", For_Refusal);
КонецЕсли;
Если For_Logistics <> 0 ТОгда
СтруктураУслуг.Вставить("For_Logistics", For_Logistics);
КонецЕсли;
Если For_Delivery_to_Buyer <> 0 ТОгда
СтруктураУслуг.Вставить("For_Delivery_to_Buyer", For_Delivery_to_Buyer);
КонецЕсли;
Если For_Return_Processing <> 0 ТОгда
СтруктураУслуг.Вставить("For_Return_Processing", For_Return_Processing);
КонецЕсли;
Если For_Return_Logistics <> 0 ТОгда
СтруктураУслуг.Вставить("For_Return_Logistics", For_Return_Logistics);
КонецЕсли;
КонецЕсли;
Для Каждого Услуга Из ПереченьДопУслуг Цикл
Если СтруктураУслуг.Получить(Услуга.Ключ) <> Неопределено Тогда
СтрокаУслуг = ТаблицаУслуг.Добавить();
СтрокаУслуг.Наименование = Услуга.Значение;
СтрокаУслуг.НаименованиеМП = Услуга.Ключ;
СтрокаУслуг.УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоРеквизиту("ЛитералУслуги",Услуга.Ключ);
СтрокаУслуг.Номенклатура = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьНоменклатуруДопУслугиМП(Перечисления.топ_ТорговыеПлощадки.СберМегаМаркет, СтрокаУслуг.УслугаМП);
СтрокаУслуг.Цена = СтруктураУслуг[Услуга.Ключ];
СтрокаУслуг.СтавкаНДС = топ_ОбщийВызовСервера.ПолучитьСтавкуНДСПоИдентификатору(НДСДопУслуг[Услуга.Ключ]);
СтавкаНДСЗнач = топ_ОбщийВызовСервера.БИТ_ПолучитьЗначениеСтавкиНДС(СтрокаУслуг.СтавкаНДС);
СтрокаУслуг.Количество = 1;
СтрокаУслуг.Сумма = СтруктураУслуг[Услуга.Ключ];
СтрокаУслуг.СуммаНДС = СтрокаУслуг.Сумма * СтавкаНДСЗнач / (100+СтавкаНДСЗнач);
КонецЕсли;
КонецЦикла;
Возврат ТаблицаУслуг;
КонецФункции
&НаСерверебезконтекста
Функция ОбработатьТаблицуТоваровСбер(ТаблицаТоваров)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| тз.Артикул КАК Артикул,
| тз.НомерОперации КАК НомерОперации,
// BSLR-4440
| тз.Идентификатор КАК Идентификатор,
| тз.НомерОтправления КАК НомерОтправления,
| тз.ТипОперации КАК ТипОперации,
| тз.НомерСтроки КАК НомерСтроки,
| тз.Цена КАК Цена,
| тз.Сумма КАК Сумма,
| тз.Количество КАК Количество,
| тз.Комиссия КАК Комиссия,
| тз.ЛогистикаСортировка КАК ЛогистикаСортировка,
| тз.СуммаКВыплате КАК СуммаКВыплате,
| тз.СуммаКВыплатеИтог КАК СуммаКВыплатеИтог
|ПОМЕСТИТЬ ВТ_ТЗ
|ИЗ
| &тз КАК тз
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВЫБОР
| КОГДА ВТ_ТЗ.Артикул = """"
| ТОГДА ""товар не определен""
| ИНАЧЕ ВТ_ТЗ.Артикул
| КОНЕЦ КАК Артикул,
| ВТ_ТЗ.НомерОперации КАК НомерОперации,
// BSLR-4440
| ВТ_ТЗ.Идентификатор КАК Идентификатор,
| ВТ_ТЗ.НомерОтправления КАК НомерОтправления,
| ВЫБОР
| КОГДА ВТ_ТЗ.ТипОперации = ""Выкуплен покупателем""
| ТОГДА ""Продажа""
| ИНАЧЕ ВТ_ТЗ.ТипОперации
| КОНЕЦ КАК ТипОперации,
| ВТ_ТЗ.НомерСтроки КАК НомерСтроки,
| ВТ_ТЗ.Цена КАК Цена,
| ВТ_ТЗ.Сумма КАК Сумма,
| ВТ_ТЗ.Количество КАК Количество,
| ВТ_ТЗ.Комиссия КАК Комиссия,
| ВТ_ТЗ.ЛогистикаСортировка КАК ЛогистикаСортировка,
| ВТ_ТЗ.СуммаКВыплате КАК СуммаКВыплате,
| ВТ_ТЗ.СуммаКВыплатеИтог КАК СуммаКВыплатеИтог
|ИЗ
| ВТ_ТЗ КАК ВТ_ТЗ";
Запрос.УстановитьПараметр("тз", ТаблицаТоваров);
РезультатЗапроса = Запрос.Выполнить();
ТаблицаТоваровБезУслуг = РезультатЗапроса.Выгрузить();
// BSLR-4440
ТаблицаТоваровБезУслуг.Свернуть("Артикул,НомерОперации, Идентификатор, НомерОтправления, ТипОперации, Цена", "Количество, Комиссия, Сумма, СуммаКВыплате, СуммаКВыплатеИтог, ЛогистикаСортировка");
Возврат ТаблицаТоваровБезУслуг;
КонецФункции
&НаКлиенте
Процедура ПослеОтветаНаВопросОЗагрузкеЛояльности(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Нет Тогда
Возврат;
КонецЕсли;
ВыполнитьЗагрузкуЧерезФайл(Истина);
КонецПроцедуры
&НаСервере
Функция ПолучитьТаблицуЗаказовСНомерамиОтправлений()
Результат = Новый ТаблицаЗначений;
Результат.Колонки.Добавить("ЗаказМП");
Результат.Колонки.Добавить("НомерОтправления");
Результат.Колонки.Добавить("Артикул");
Для Каждого Стр из Объект.Товары Цикл
Если ТипЗнч(Стр.ЗаказПокупателяМП) = Тип("ДокументСсылка.топ_ЗаказТорговойПлощадки") Тогда
Если Стр.ЗаказПокупателяМП <> Документы.топ_ЗаказТорговойПлощадки.ПустаяСсылка() Тогда
Для Каждого Ст из Стр.ЗаказПокупателяМП.Товары Цикл
нСтр = Результат.Добавить();
нСтр.ЗаказМП = Стр.ЗаказПокупателяМП;
нСтр.НомерОтправления = Стр.ЗаказПокупателяМП.НомерЗаказа;
//Попытка нСтр.Артикул = Ст.Товар.КодПоставщика; Исключение КонецПопытки;
нСтр.Артикул = Стр.Артикул; // письмерова 14.03.2024 BSLR-3076
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
&НаСервере
Процедура ДополнитьТаблицуУслугСбер(Оператору,АкцииМерчанта,ОператоруЗаАкции)
ПереченьДопУслуг = топ_РаботаСМаркетплейсами_СберМегаМаркет.ПолучитьПереченьДопУслугМП();
НДСДопУслуг = топ_РаботаСМаркетплейсами_СберМегаМаркет.ПолучитьНДСДопУслугМП();
СтруктураУслуг = Новый Соответствие;
СтруктураУслуг.Вставить("document_exchange", 0);
СтруктураУслуг.Вставить("remuneration_operator", АкцииМерчанта + ОператоруЗаАкции); // Оператору); - BSLR-4262
СтруктураУслуг.Вставить("transaction_support", Оператору); // АкцииМерчанта + ОператоруЗаАкции); - BSLR-4262
// письмерова 11.03.2024 BSLR-3076
loyalty_program_reward = Объект.Товары.Итог("СуммаДоплатыOzon"); // выставляем Сберу расходную накл
СтруктураУслуг.Вставить("loyalty_program_reward", loyalty_program_reward);
Для Каждого Услуга Из ПереченьДопУслуг Цикл
Если Услуга.Ключ = "komission" или Услуга.Ключ = "logistics_sorting" Тогда
ПРодолжить;// добавлены ранее в таб часть Услуги
КонецЕсли;
Если СтруктураУслуг.Получить(Услуга.Ключ) <> Неопределено Тогда
СтрокаУслуг = Объект.Услуги.Добавить();
СтрокаУслуг.Наименование = Услуга.Значение;
СтрокаУслуг.НаименованиеМП = Услуга.Ключ;
СтрокаУслуг.УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоРеквизиту("ЛитералУслуги",Услуга.Ключ);
// письмерова 11.03.2024 BSLR-3076
Если СтрокаУслуг.УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.ПустаяСсылка() Тогда // нет элемента справочника УслугиМП, но он есть в перечне
Перечень = Новый соответствие;
Перечень.Вставить(Услуга.Ключ,Услуга.Значение);
ПереченьНДС = Новый соответствие;
ПереченьНДС.Вставить(Услуга.Ключ,"Без НДС");
топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.СоздатьЭлементыНоменклатурыУслугМП(Перечень,ПереченьНДС,
Перечисления.топ_ТорговыеПлощадки.СберМегаМаркет,
Неопределено);
СтрокаУслуг.УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоРеквизиту("ЛитералУслуги", Услуга.Ключ);
Конецесли;
СтрокаУслуг.Номенклатура = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьНоменклатуруДопУслугиМП(Перечисления.топ_ТорговыеПлощадки.СберМегаМаркет, СтрокаУслуг.УслугаМП);
СтрокаУслуг.СтавкаНДС = топ_ОбщийВызовСервера.ПолучитьСтавкуНДСПоИдентификатору(НДСДопУслуг[Услуга.Ключ]);
СтавкаНДСЗнач = топ_ОбщийВызовСервера.БИТ_ПолучитьЗначениеСтавкиНДС(топ_ОбщийВызовСервера.ПолучитьСтавкуНДСПоИдентификатору(СтрокаУслуг.СтавкаНДС));
СтрокаУслуг.Сумма = СтруктураУслуг[Услуга.Ключ];
СтрокаУслуг.СуммаНДС = СтрокаУслуг.Сумма * СтавкаНДСЗнач / (100+СтавкаНДСЗнач);
// письмерова 11.03.2024 BSLR-3076 - это доплата, выставляем Сберу расх накл
Если Услуга.Ключ = "loyalty_program_reward" Тогда
СтрокаУслуг.Сумма = - СтрокаУслуг.Сумма;
СтрокаУслуг.СуммаНДС = - СтрокаУслуг.СуммаНДС;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ДополнитьДаннымиСбер(МассивКодов)
Запрос = Новый Запрос("ВЫБРАТЬ
| топ_ТоварыТорговыхПлощадок.Ссылка КАК Товар,
| топ_СоответствиеТоваров.Номенклатура КАК Номенклатура,
| топ_СоответствиеТоваров.Характеристика КАК Характеристика,
| топ_СоответствиеТоваров.Упаковка КАК ЕдиницаИзмерения,
| топ_ТоварыТорговыхПлощадок.Ссылка.offer_id КАК offer_id
|ИЗ
| Справочник.топ_ТоварыТорговыхПлощадок КАК топ_ТоварыТорговыхПлощадок
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.топ_СоответствиеТоваров КАК топ_СоответствиеТоваров
| ПО топ_ТоварыТорговыхПлощадок.Ссылка = топ_СоответствиеТоваров.Товар
|ГДЕ
| топ_ТоварыТорговыхПлощадок.offer_id В(&МассивКодов)
| И топ_ТоварыТорговыхПлощадок.ЛичныйКабинет = &ЛичныйКабинет");
Запрос.УстановитьПараметр("МассивКодов",МассивКодов);
Запрос.УстановитьПараметр("ЛичныйКабинет",Объект.ЛичныйКабинет);
ТаблицаДанных = Запрос.Выполнить().Выгрузить();
Для Каждого Стр из Объект.Товары Цикл
Если Не ЗначениеЗаполнено(Стр.Товар) Тогда
НайтиСтроки = ТаблицаДанных.НайтиСтроки(новый Структура("offer_id", Стр.Артикул));
Если НайтиСтроки.Количество() Тогда
ЗаполнитьЗначенияСвойств(Стр,найтиСтроки[0],"Товар,Номенклатура,Характеристика,ЕдиницаИзмерения");
КонецЕсли;
КонецЕсли;
КонецЦикла;
// письмерова 13.01.2025 BSLR-4190
ВремТабл = Объект.Товары.Выгрузить();
ВремТабл.Свернуть("Артикул,ШтрихКод, Номенклатура, Характеристика, ЕдиницаИзмерения, Товар, ТипОперации, СтавкаНДС, Цена, ЗаказПокупателяМП, ЗаказПокупателя, Идентификатор, ЭтоНабор",
"Количество, Комиссия, Сумма, СуммаНДС, СуммаНДСВознаграждения, СуммаДоплатыOzon, СуммаКВыплате, ВознаграждениеОператору, КомиссияБазовая, ВыплатыПоМеханикамЛояльностиПартнеров");
Объект.Товары.Загрузить(ВремТабл);
// комиссию в строках с нулевым количеством нужно перенести на этот же артикул
// или на любой, если больше нет срок с таким товаром
ТаблНулевая = Объект.Товары.Выгрузить(новый Структура("Количество",0));
Для Каждого Стр из ТаблНулевая Цикл
Если Стр.Комиссия = 0 Тогда
Продолжить;
КонецЕсли;
НайденыСтроки = Объект.Товары.НайтиСтроки(новый Структура("Артикул", Стр.Артикул));
КомиссияПеренесена = Ложь;
Если НайденыСтроки.Количество() ТОгда
Для Каждого Ст из НайденыСтроки Цикл
Если Ст.Количество = 0 Тогда
Продолжить;
КонецЕсли;
Ст.Комиссия = Ст.Комиссия + Стр.Комиссия;
КомиссияПеренесена = Истина;
Прервать;
КонецЦикла;
КонецЕсли;
Если Не КомиссияПеренесена Тогда // нет больше строк с таким товаром - переносим на первую не нулевую строку таб части
Для Каждого СтТ из Объект.Товары Цикл
Если СтТ.Количество = 0 Тогда
Продолжить;
КонецЕсли;
СтТ.Комиссия = СтТ.Комиссия + Стр.Комиссия;
КомиссияПеренесена = Истина;
Прервать;
КонецЦикла;
КонецЕсли;
КонецЦикла;
МассивДляУдаления = Новый Массив;
Для Каждого Стр из Объект.Товары Цикл
Если Стр.Количество = 0 Тогда
Стр.Комиссия = 0;
Если Стр.СуммаКВыплате <> 0 Тогда
Продолжить;
КонецЕсли;
Если Стр.ВознаграждениеОператору <> 0 Тогда
Продолжить;
КонецЕсли;
МассивДляУдаления.Добавить(Стр);
КонецЕсли;
КонецЦикла;
Для Каждого Эл из МассивДляУдаления Цикл
Объект.Товары.Удалить(Эл);
КонецЦикла;
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура ОбновитьДанныеФормыНаКлиенте(ДанныеВыполнения, ДополнительныеПараметры = Неопределено, ЗагрузкаЧерезФайл = Ложь)
утоваровЕстьХарактеристики = ИспользуютсяХарактеристики(Объект.ЛичныйКабинет);
Если Маркетплейс <> ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда
Объект.Товары.Очистить();
КонецЕсли;
// вывод накопленных сообщений
Если ДанныеВыполнения.Сообщение <> "" Тогда
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = ДанныеВыполнения.Сообщение;
Сообщение.ИдентификаторНазначения = ЭтаФорма.УникальныйИдентификатор;
Сообщение.Сообщить();
Конецесли;
Объект.Услуги.Очистить();
НомерСтроки = 1;
если ДанныеВыполнения.свойство("Дата") тогда
Объект.ДатаВходящегоДокумента = ДанныеВыполнения.дата;
Иначе
ДанныеВыполнения.Вставить("Дата", ТекущаяДата());
КонецЕсли;
если ДанныеВыполнения.свойство("Номер") тогда
Объект.НомерВходящегоДокумента = ДанныеВыполнения.номер;
КонецЕсли;
//ЯМ
Если ДанныеВыполнения.дата = Дата(1,1,1) ТОгда
ДанныеВыполнения.дата = Объект.ДатаОкончания;
КонецЕсли;
// письмерова 21.01.2025 BSLR-4260
// только ут
ДействующиеНастройки = Неопределено;
СтавкаНДС = Неопределено;
ДействующиеНастройки = ПолучитьДействующиеПараметрыНалоговУчетныхПолитикНаДату(
"НастройкиУчетаНДСПриУСН", Объект.ЛичныйКабинет, Объект.ДатаОкончания, Ложь);
Если ДействующиеНастройки <> Неопределено Тогда
СтавкаНДС = ДействующиеНастройки.СтавкаНДС;
Иначе
СтавкаНДС = ПолучитьСтавкуНДСПоУмолчанию(Объект.ЛичныйКабинет,Объект.ДатаОкончания); // письмерова 16.04.2025
КонецЕсли;
// письмерова 07.04.2025 BSLR-4462
Если БратьСтавкуНДСИзНоменклатуры(Объект.ЛичныйКабинет) ТОгда
СтавкаНДС = Неопределено;
КонецЕсли;
Для Каждого Элемент Из ДанныеВыполнения.Товары Цикл
Если ЗагрузкаЧерезФайл Тогда
// письмерова 27.11.2024 BSLR-4102
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
Если Элемент.Количество = 0 и Элемент.Комиссия = 0 и Элемент.Сумма = 0 Тогда
Продолжить; // пустые строки есть после обработки таб части
КонецЕсли;
КонецЕсли;
НоваяСтрока = Объект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Элемент);
НоваяСтрока.СтавкаНДС = Строка(Элемент.СтавкаНДС);// письмерова 06.12.2023 BSLR-2422
Если ТипЗнч(Элемент.ЗаказПокупателя) = тип("ДокументСсылка.топ_ЗаказТорговойПлощадки") тогда
НоваяСтрока.ЗаказПокупателяМП = Элемент.ЗаказПокупателя;
КонецЕсли;
// письмерова 20.08.2024 BSLR-3677
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда
НоваяСтрока.ВыплатыПоМеханикамЛояльностиПартнеров = Элемент.ВыплатыЛояльности;
Конецесли;
// письмерова
Если не ЗначениеЗаполнено(Элемент.ЗаказПокупателяМП) Тогда // письмерова
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда
НоваяСтрока.ЗаказПокупателяМП = Элемент.ИД_Заказ; // письмерова 09.07.2025 BSLR-4733
Конецесли;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(НоваяСтрока.Товар) Тогда
// письмерова 17.04.2023 BSLR-1755 - очистить ном и хар, если товар не заполнен, ЭтоНабор = Ложь
НоваяСтрока.Номенклатура = "";
НоваяСтрока.Характеристика = "";
НоваяСтрока.ЕдиницаИзмерения = "";
НоваяСтрока.ЭтоНабор = Ложь;
НоваяСтрока.СтавкаНДС = "";
НоваяСтрока.СуммаНДС = "";
Если Маркетплейс <> ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
НоваяСтрока.СуммаНДСВознаграждения = ""; КонецЕсли;
// письмерова 05.03.2024 BSLR-2771
Иначе // разборки с кривым ШК и размером ВБ, в запросе не отрабатывает
// вернула в код, т.к. опять приходят продажи без шк, но в указанием размера, BSLR-4182
Если Элемент.Свойство("Размер") ТОгда
Если Элемент.Размер <> "" И Не ЗначениеЗаполнено(Элемент.РазмерWB) Тогда
Если Не ЗначениеЗаполнено(НоваяСтрока.Номенклатура) ТОгда
ДанныеНоменклатуры = НайтиНоменклатуруИХарактеристикуПоРазмеру(НоваяСтрока.Товар, Элемент.Размер);
НоваяСтрока.Номенклатура = ДанныеНоменклатуры.Номенклатура;
НоваяСтрока.Характеристика = ДанныеНоменклатуры.Характеристика;
НоваяСтрока.РазмерWB = ДанныеНоменклатуры.РазмерWB;
НоваяСтрока.ЕдиницаИзмерения = ДанныеНоменклатуры.Упаковка;
Если ЗначениеЗаполнено(НоваяСтрока.Номенклатура) тогда
НоваяСтрока.СтавкаНДС = ?(СтавкаНДС = Неопределено,топ_ОбщийВызовСервера.БИТ_СтавкаНДС_Номенклатуры(НоваяСтрока.Номенклатура,Объект.ЛичныйКабинет,Объект.ДатаОкончания),СтавкаНДС); // BSLR-4260
СтавкаНДСЗнач = топ_ОбщийВызовСервера.БИТ_ПолучитьЗначениеСтавкиНДС(топ_ОбщийВызовСервера.ПолучитьСтавкуНДСПоИдентификатору(НоваяСтрока.СтавкаНДС)); // письмерова 30.05.2024
НоваяСтрока.СуммаНДС = НоваяСтрока.Сумма * СтавкаНДСЗнач / (100+СтавкаНДСЗнач);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") Тогда
//НоваяСтрока.СуммаКВыплате = Элемент.СуммаКВыплатеИтог;
НоваяСтрока.Комиссия = Элемент.Комиссия;// + Элемент.ЛогистикаСортировка; - логистику будем распределять при проведении, комиссия пойдет один в один по данным загрузки
КонецЕсли;
Иначе
// письмерова 08.12.2023 BSLR-2249
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
Если Элемент.Количество = 0 и Элемент.Комиссия = 0 и Элемент.СуммаНДСВознаграждения = 0 Тогда
Продолжить; // пустые строки есть после обработки таб части
КонецЕсли;
КонецЕсли;
НоваяСтрока = Объект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Элемент);
НоваяСтрока.СтавкаНДС = Строка(Элемент.СтавкаНДС);
Если НЕ ЗначениеЗаполнено(НоваяСтрока.Товар) Тогда
НоваяСтрока.Номенклатура = "";
НоваяСтрока.Характеристика = "";
НоваяСтрока.ЕдиницаИзмерения = "";
НоваяСтрока.ЭтоНабор = Ложь;
НоваяСтрока.СтавкаНДС = "";
НоваяСтрока.СуммаНДС = "";
Если Маркетплейс <> ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
НоваяСтрока.СуммаНДСВознаграждения = ""; КонецЕсли;
Иначе // разборки с кривым ШК и размером ВБ, в запросе не отрабатывает
// вернула в код, т.к. опять приходят продажи без шк, но в указанием размера, BSLR-4182
Если Элемент.Свойство("Размер") ТОгда
Если Элемент.Размер <> "" И Не ЗначениеЗаполнено(Элемент.РазмерWB) Тогда
Если Не ЗначениеЗаполнено(НоваяСтрока.Номенклатура) ТОгда
ДанныеНоменклатуры = НайтиНоменклатуруИХарактеристикуПоРазмеру(НоваяСтрока.Товар, Элемент.Размер);
НоваяСтрока.Номенклатура = ДанныеНоменклатуры.Номенклатура;
НоваяСтрока.Характеристика = ДанныеНоменклатуры.Характеристика;
НоваяСтрока.РазмерWB = ДанныеНоменклатуры.РазмерWB;
НоваяСтрока.ЕдиницаИзмерения = ДанныеНоменклатуры.Упаковка;
// письмерова 16.06.2023 BSLR-2106
Если ЗначениеЗаполнено(НоваяСтрока.Номенклатура) тогда
НоваяСтрока.СтавкаНДС = ?(СтавкаНДС = Неопределено,топ_ОбщийВызовСервера.БИТ_СтавкаНДС_Номенклатуры(НоваяСтрока.Номенклатура,Объект.ЛичныйКабинет,Объект.ДатаОкончания),СтавкаНДС); // BSLR-4260
СтавкаНДСЗнач = топ_ОбщийВызовСервера.БИТ_ПолучитьЗначениеСтавкиНДС(топ_ОбщийВызовСервера.ПолучитьСтавкуНДСПоИдентификатору(НоваяСтрока.СтавкаНДС)); // письмерова 30.05.2024
НоваяСтрока.СуммаНДС = НоваяСтрока.Сумма * СтавкаНДСЗнач / (100+СтавкаНДСЗнач);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
// письмерова 26.11.2024 BSLR-4102 - обнулить количество для Коррекции продаж
Если НоваяСтрока.ОбоснованиеДляОплаты = "Коррекция продаж" Или НоваяСтрока.ОбоснованиеДляОплаты = "Коррекция возвратов" ТОгда
НоваяСтрока.Количество = 0;
КонецЕсли;
// письмерова 02.09.2025 BSLR-4698
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
Если НоваяСтрока.ПродажаЮЛ ТОгда
НоваяСтрока.Идентификатор = Элемент.srid;
КонецЕсли;
КонецЕсли;
КонецЕсли;
НомерСтроки = НомерСтроки + 1;
КонецЦикла;
// письмерова 15.03.2023 BSLR-1553
Если ГруппироватьТоварыВОтчетеКомиссионераБезУчетаЗаказа(Объект.ЛичныйКабинет) Тогда
СвернутьНаСервере("Товары");
КонецЕсли;
// BSLR-4243
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") ТОгда
ВыровнятьНДСВознаграждения();
КонецЕсли;
// вывод сообщений после группировки BSLR-2675
НомерСтроки = 1;
Для Каждого НоваяСтрока из Объект.Товары Цикл
Если НЕ ЗначениеЗаполнено(НоваяСтрока.Товар) Тогда
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = СтрШаблон("В строке %1 (Товары) не удалось найти товар. Попробуйте выполнить поиск в справочнике ""Товары торговых площадок"" вручную по артикулу. Идентификатор - %2", НомерСтроки, НоваяСтрока.Идентификатор);
Сообщение.Поле = СтрШаблон("СписокOZON[%1].Товар", НомерСтроки - 1);
Сообщение.ИдентификаторНазначения = ЭтаФорма.УникальныйИдентификатор;
Сообщение.Сообщить();
КонецЕсли;
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда
Если НЕ ЗначениеЗаполнено(НоваяСтрока.Номенклатура) Тогда
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = СтрШаблон("В строке %1 (Товары) не найдена сопоставленая номенклатура. Уцененные товары не сопоставляются автоматически. Проверьте, является ли %2 уцененным и вручную укажите номенклатуру, с которой он должен быть связан.", НомерСтроки, НоваяСтрока.Товар);
Сообщение.Поле = СтрШаблон("СписокOZON[%1].Товар", НомерСтроки - 1);
Сообщение.ИдентификаторНазначения = ЭтаФорма.УникальныйИдентификатор;
Сообщение.Сообщить();
КонецЕсли;
Конецесли;
НомерСтроки = НомерСтроки + 1;
КонецЦикла;
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") И Объект.ВыгужатьДетализациюWB_Excel Тогда //LAShadrin 18/07/23 bslr-1338
РезультатВыгрузки = ДанныеВыполнения.СырыеТовары;
РезультатВыгрузки.Показать();
КонецЕсли;
// письмерова 09.04.2024 BSLR-3440
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
Если ДанныеВыполнения.Свойство("СуммаУслугХранения") Тогда
Если ДанныеВыполнения.СуммаУслугХранения <> 0 Тогда
Объект.СуммаУслугХранения = ДанныеВыполнения.СуммаУслугХранения;
КонецЕсли;
Если ДанныеВыполнения.СуммаУслугПлатнойПриемки <> 0 Тогда
Объект.СумаУслугПлатнойПриемки = ДанныеВыполнения.СуммаУслугПлатнойПриемки;
КонецЕсли;
КонецЕсли;
// письмерова 16.10.2025 BSLR-4460
Если ДанныеВыполнения.Свойство("Компенсации") Тогда
Если ДанныеВыполнения.Компенсации.Количество() Тогда
ЗаполнитьТабЧастьКомпенсации(ДанныеВыполнения.Компенсации, Истина);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Для Каждого Элемент Из ДанныеВыполнения.Услуги Цикл
//письмерова 11.08.2023 BSLR-2371 - авнсовая оплата и частичная компенсация не добавляем в услуги
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
Если Элемент.НаименованиеМП = "advance_payment" Или Элемент.НаименованиеМП = "partial_compensation" Или Элемент.НаименованиеМП = "delivery_EX_выкупы"
Или Элемент.НаименованиеМП = "compensation_for_damage" Тогда // убрать компенсацию, она в таб части письмерова 16.10.2025 BSLR-4460
Продолжить;
КонецЕсли;
КонецЕсли;
НоваяСтрока = Объект.Услуги.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Элемент);
НоваяСтрока.СтавкаНДС = Строка(Элемент.СтавкаНДС);
// письмерова 20.08.2024 BSLR-3677
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда
Если Элемент.НаименованиеМП = "PaymentsBasedOnPartnerLoyaltyMechanics" Тогда
НоваяСтрока.Сумма = - Объект.Товары.Итог("ВыплатыПоМеханикамЛояльностиПартнеров");
НоваяСтрока.СуммаНДС = НоваяСтрока.Сумма*ЗначениеОсновнойСтавкиНДС/(100 + ЗначениеОсновнойСтавкиНДС); // BSLR-5126
КонецЕсли;
// письмерова 10.04.2025 BSLR-4508
Если Элемент.НаименованиеМП = "PointsForDiscounts" Тогда
НоваяСтрока.Сумма = - Объект.Товары.Итог("СуммаДоплатыOzon");
НоваяСтрока.СуммаНДС = НоваяСтрока.Сумма*ЗначениеОсновнойСтавкиНДС/(100 + ЗначениеОсновнойСтавкиНДС); // BSLR-5126
КонецЕсли;
КонецЕсли;
КонецЦикла;
// письмерова 31.01.2025 BSLR-4195
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет") Тогда
Если ЗагружатьСуммуСкидокВУслугу(Объект.ЛичныйКабинет) Тогда // BSLR-4508
ВыделитьСкидкиВОтдельнуюУслугуЯМ();
КонецЕсли;
КонецЕсли;
УстановитьВидимостьДоступность();
КонецПроцедуры
// письмерова 11.04.2025 BSLR-4508
&НаСервереБезКонтекста
Функция ЗагружатьСуммуСкидокВУслугу(ЛК)
Возврат ЛК.ЗагружатьСуммуСкидокВУслугу;
КонецФункции
&НаСервере
Функция НайтиНоменклатуруИХарактеристикуПоРазмеру(Товар, Размер)
// BSLR-4099
ДанныеНоменклатуры = Новый Структура("Номенклатура,Характеристика, Упаковка, Товар, РазмерWB",
Справочники.Номенклатура.ПустаяСсылка(),
Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка(),
Справочники.УпаковкиЕдиницыИзмерения.ПустаяСсылка(),
Товар, Размер);
НужныйРазмер = Справочники.топ_РазмерыТоваровWB.НайтиПоРеквизиту("размер", СокрЛП(Размер),,Товар);
Если НужныйРазмер <> Справочники.топ_РазмерыТоваровWB.ПустаяСсылка() ТОгда // BSLR-4182
Данные = Новый Структура("Товар, Размер",Товар,НужныйРазмер);
ДанныеНоменклатуры = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьДанныеСвязаннойНомеклатурыПоТовару(Данные);
Иначе // ищем по другому реквизиту, путаница с идентификацией размера на строне вб, BSLR-4182
НужныйРазмер = Справочники.топ_РазмерыТоваровWB.НайтиПоРеквизиту("рос_размер", СокрЛП(Размер),,Товар);
Если НужныйРазмер <> Справочники.топ_РазмерыТоваровWB.ПустаяСсылка() ТОгда // BSLR-4182
Данные = Новый Структура("Товар, Размер",Товар,НужныйРазмер);
ДанныеНоменклатуры = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьДанныеСвязаннойНомеклатурыПоТовару(Данные);
КонецЕсли;
КонецЕсли;
Возврат ДанныеНоменклатуры;
КонецФункции
&НаКлиенте
Процедура ОбновитьДанныеФормыНаКлиенте_Выкуп(ДанныеВыполнения, ДополнительныеПараметры = Неопределено, ЗагрузкаЧерезФайл = Ложь)
УТоваровЕстьХарактеристики = ИспользуютсяХарактеристики(Объект.ЛичныйКабинет);
Если Маркетплейс <> ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда
Объект.Выкуп.Очистить();
КонецЕсли;
Если ДанныеВыполнения.свойство("Дата") тогда
Объект.ДатаВходящегоДокументаВыкупа = ДанныеВыполнения.дата;
КонецЕсли;
если ДанныеВыполнения.свойство("Номер") тогда
Объект.НомерВходящегоДокументаВыкупа = ДанныеВыполнения.номерВыкуп;
КонецЕсли;
// письмерова 21.01.2025 BSLR-4260
// только ут
ДействующиеНастройки = Неопределено;
СтавкаНДС = Неопределено;
ДействующиеНастройки = ПолучитьДействующиеПараметрыНалоговУчетныхПолитикНаДату(
"НастройкиУчетаНДСПриУСН", Объект.ЛичныйКабинет, Объект.ДатаОкончания, Ложь);
Если ДействующиеНастройки <> Неопределено Тогда
СтавкаНДС = ДействующиеНастройки.СтавкаНДС;
Иначе
СтавкаНДС = ПолучитьСтавкуНДСПоУмолчанию(Объект.ЛичныйКабинет,Объект.ДатаОкончания); // письмерова 16.04.2025
КонецЕсли;
// письмерова 07.04.2025 BSLR-4462
Если БратьСтавкуНДСИзНоменклатуры(Объект.ЛичныйКабинет) ТОгда
СтавкаНДС = Неопределено;
КонецЕсли;
НомерСтроки = 1;
Для Каждого Элемент Из ДанныеВыполнения.ТоварыВыкуп Цикл
Если ЗагрузкаЧерезФайл Тогда
НоваяСтрока = Объект.Выкуп.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Элемент);
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
//НоваяСтрока.СуммаКВыплате = НоваяСтрока.Сумма;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(НоваяСтрока.Товар) Тогда
// письмерова 17.04.2023 BSLR-1755 - очистить ном и хар, если товар не заполнен, ЭтоНабор = Ложь
НоваяСтрока.Номенклатура = "";
НоваяСтрока.Характеристика = "";
НоваяСтрока.ЕдиницаИзмерения = "";
НоваяСтрока.ЭтоНабор = Ложь;
НоваяСтрока.СтавкаНДС = "";
НоваяСтрока.СуммаНДС = "";
Если Маркетплейс <> ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
НоваяСтрока.СуммаНДСВознаграждения = ""; КонецЕсли;
Иначе
// вернула в код, т.к. опять приходят продажи без шк, но в указанием размера, BSLR-4182
Если Элемент.Свойство("Размер") ТОгда
Если Элемент.Размер <> "" И Не ЗначениеЗаполнено(Элемент.РазмерWB) Тогда
Если Не ЗначениеЗаполнено(НоваяСтрока.Номенклатура) ТОгда
ДанныеНоменклатуры = НайтиНоменклатуруИХарактеристикуПоРазмеру(НоваяСтрока.Товар, Элемент.Размер);
НоваяСтрока.Номенклатура = ДанныеНоменклатуры.Номенклатура;
НоваяСтрока.Характеристика = ДанныеНоменклатуры.Характеристика;
НоваяСтрока.РазмерWB = ДанныеНоменклатуры.РазмерWB;
НоваяСтрока.ЕдиницаИзмерения = ДанныеНоменклатуры.Упаковка;
// письмерова 16.06.2023 BSLR-2106
Если ЗначениеЗаполнено(НоваяСтрока.Номенклатура) тогда
НоваяСтрока.СтавкаНДС = ?(СтавкаНДС = Неопределено,топ_ОбщийВызовСервера.БИТ_СтавкаНДС_Номенклатуры(НоваяСтрока.Номенклатура,Объект.ЛичныйКабинет,Объект.ДатаОкончания),СтавкаНДС); // BSLR-4260
СтавкаНДСЗнач = топ_ОбщийВызовСервера.БИТ_ПолучитьЗначениеСтавкиНДС(НоваяСтрока.СтавкаНДС);
НоваяСтрока.СуммаНДС = НоваяСтрока.Сумма * СтавкаНДСЗнач / (100+СтавкаНДСЗнач);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Иначе
НоваяСтрока = Объект.Выкуп.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Элемент);
НоваяСтрока.СтавкаНДС = Строка(Элемент.СтавкаНДС);
Если НоваяСтрока.ТипОперации = "Продажа" и НоваяСтрока.Сумма > 0 ТОгда
// выкупы, письмерова BSLR-1680 21.04.2023
НоваяСтрока.СуммаКВыплате = НоваяСтрока.СуммаКВыплате;//НоваяСтрока.Сумма - НоваяСтрока.Комиссия;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(НоваяСтрока.Товар) Тогда
// письмерова 17.04.2023 BSLR-1755 - очистить ном и хар, если товар не заполнен, ЭтоНабор = Ложь
НоваяСтрока.Номенклатура = "";
НоваяСтрока.Характеристика = "";
НоваяСтрока.ЕдиницаИзмерения = "";
НоваяСтрока.ЭтоНабор = Ложь;
НоваяСтрока.СтавкаНДС = "";
НоваяСтрока.СуммаНДС = "";
Если Маркетплейс <> ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
НоваяСтрока.СуммаНДСВознаграждения = ""; КонецЕсли;
Иначе // разборки с кривым ШК и размером ВБ, в запросе не отрабатывает
// вернула в код, т.к. опять приходят продажи без шк, но в указанием размера, BSLR-4182
Если Элемент.Свойство("Размер") ТОгда
Если Элемент.Размер <> "" И Не ЗначениеЗаполнено(Элемент.РазмерWB) Тогда
Если Не ЗначениеЗаполнено(НоваяСтрока.Номенклатура) ТОгда
ДанныеНоменклатуры = НайтиНоменклатуруИХарактеристикуПоРазмеру(НоваяСтрока.Товар, Элемент.Размер);
НоваяСтрока.Номенклатура = ДанныеНоменклатуры.Номенклатура;
НоваяСтрока.Характеристика = ДанныеНоменклатуры.Характеристика;
НоваяСтрока.РазмерWB = ДанныеНоменклатуры.РазмерWB;
НоваяСтрока.ЕдиницаИзмерения = ДанныеНоменклатуры.Упаковка;
// письмерова 16.06.2023 BSLR-2106
Если ЗначениеЗаполнено(НоваяСтрока.Номенклатура) тогда
НоваяСтрока.СтавкаНДС = ?(СтавкаНДС = Неопределено,топ_ОбщийВызовСервера.БИТ_СтавкаНДС_Номенклатуры(НоваяСтрока.Номенклатура,Объект.ЛичныйКабинет,Объект.ДатаОкончания),СтавкаНДС); // BSLR-4260
СтавкаНДСЗнач = топ_ОбщийВызовСервера.БИТ_ПолучитьЗначениеСтавкиНДС(НоваяСтрока.СтавкаНДС);
НоваяСтрока.СуммаНДС = НоваяСтрока.Сумма * СтавкаНДСЗнач / (100+СтавкаНДСЗнач);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
НомерСтроки = НомерСтроки + 1;
КонецЦикла;
// письмерова 09.01.2024 BSLR-4099
Если ДанныеВыполнения.Свойство("ДоставкаВыкупы") Тогда
Если ДанныеВыполнения.ДоставкаВыкупы <> 0 Тогда
ДополнитьУслугиДаннымиДоставкаВыкупы(ДанныеВыполнения.ДоставкаВыкупы);
КонецЕсли;
КонецЕсли;
//LAShadrin 22/03/23 если мы по вб грузим мз файла, то надо догрузить услуги
Если ЗагрузкаЧерезФайл И Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
Для Каждого Элемент Из ДанныеВыполнения.СписокУслуг Цикл
Если Элемент.НаименованиеМП = "delivery_EX_выкупы" Тогда //письмерова 27.11.2023 BSLR-2869
Продолжить;
КонецЕсли;
НоваяСтрока = Объект.Услуги.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Элемент);
КонецЦикла;
КонецЕсли;
// вывод сообщений после группировки BSLR-2675
НомерСтроки = 1;
Для Каждого НоваяСтрока из Объект.Выкуп Цикл
Если НЕ ЗначениеЗаполнено(НоваяСтрока.Товар) Тогда
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = СтрШаблон("В строке %1 (Выкуп) не удалось найти товар. Попробуйте выполнить поиск в справочнике ""Товары торговых площадок"" вручную по артикулу. Идентификатор - %2", НомерСтроки, НоваяСтрока.Идентификатор);
Сообщение.Поле = СтрШаблон("Объект.Выкуп[%1].Товар", НомерСтроки - 1);
Сообщение.ИдентификаторНазначения = ЭтаФорма.УникальныйИдентификатор;
Сообщение.Сообщить();
КонецЕсли;
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда
Если НЕ ЗначениеЗаполнено(НоваяСтрока.Номенклатура) Тогда
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = СтрШаблон("В строке %1 (Выкуп) не найдена сопоставленая номенклатура. Уцененные товары не сопоставляются автоматически. Проверьте, является ли %2 уцененным и вручную укажите номенклатуру, с которой он должен быть связан.", НомерСтроки, НоваяСтрока.Товар);
Сообщение.Поле = СтрШаблон("Объект.Выкуп[%1].Товар", НомерСтроки - 1);
Сообщение.ИдентификаторНазначения = ЭтаФорма.УникальныйИдентификатор;
Сообщение.Сообщить();
КонецЕсли;
Конецесли;
НомерСтроки = НомерСтроки + 1;
КонецЦикла;
УстановитьВидимостьДоступность();
КонецПроцедуры
#Область СозданиеДокументов
// письмерова 20.11.2024 BSLR-4071
&НаКлиенте
Процедура СоздатьДокументы(Команда)
Если Объект.ЗаменятьВРеализацииПоВыкупамНаборыНаКомплекты Тогда
Если ЕстьНезаполненныеКомпкектыНоменклатуры() Тогда
СписокВыбора = Новый СписокЗначений;
СписокВыбора.Добавить("Создать", "Создать",,);
СписокВыбора.Добавить("Отмена", "Отмена",,);
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопросОСозданииКомпкектов", ЭтаФорма);
ПоказатьВопрос(ОписаниеОповещения, "Включена настройка ""Заменять в Реализации по выкупам наборы на комплекты"". Связь товара-набора с комплектом не найдена." ,
СписокВыбора,,,"Создать новую номенклатуру комплекта?");
Иначе
СоздатьДокументыПовторныйВызов();
Конецесли;
Иначе
СоздатьДокументыПовторныйВызов();
КонецЕсли;
КонецПроцедуры
// письмерова 20.11.2024 BSLR-4071
&НаКлиенте
Процедура ПослеОтветаНаВопросОСозданииКомпкектов(Результат, ДополнительныеПараметры) Экспорт
Если Результат = "Отмена" Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю("Документы по отчету комиссионера не созданы. Для создания документов выполните одно из действий: отключите флаг ""Заменять в Реализации по выкупам наборы на комплекты"" или укажите для Товарав торговых площадок-наборов соответствующие комплекты. Подробнее - см. Справку");
Возврат;
КонецЕсли;
Если Результат = "Создать" Тогда
РезультатСоздания = СоздатьКомплектыКНаборамНаСервере();
Если Не РезультатСоздания.Ошибка ТОгда
СоздатьДокументыПовторныйВызов();
Иначе
ОбщегоНазначенияКлиент.СообщитьПользователю(РезультатСоздания.Сообщение);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// письмерова 20.11.2024 BSLR-4071
&НаКлиенте
Процедура СоздатьДокументыПовторныйВызов()
// письмерова 22.08.2023 BSLR-2035
ЕстьНезаполненыеЮЛ = Ложь;
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда
ЕстьНезаполненыеЮЛ = ПроверитьЗаполнениеЮЛ();
Если ЕстьНезаполненыеЮЛ Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю("Обнаружены продажи юридическим лицам, но партнеры/контрагенты не созданы/не заполнены. Создайте нужных контрагентов или повторите загрузку данных юр. лиц с включенным флагом ""Создавать контрагентов (если есть продажи юр.лицам)""");
КонецЕсли;
КонецЕсли;
// письмерова 26.06.2023 BSLR-2022
ЕстьОшибкаСоглашения = ПроверитьСпособРасчетаКомиссионногоВознаграждения(Объект.ЛичныйКабинет, Объект.ОтражатьКомиссионноеВознаграждениеОтдельнойУслугой); // BSLR-3906
ЕстьОшибкаПустогоПериода = НЕ ЗначениеЗаполнено(Объект.ДатаНачала); // BSLR-3977
Если ЕстьОшибкаПустогоПериода Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю("Заполните поле ""Период""");
КонецЕсли;
// письмерова 20.04.2023 BSLR-1717
// проверка использования/заполнения соглаш/договор с поставщиком
РезультатПроверкиСоглашения = ОпределитьЗаполнениеСоглашенияДоговораСПостащиком(Объект.ЛичныйКабинет);
// письмерова 29.05.2023 BSLR-1921 - проверка заполнения договора продажи для выкупов, проверяем только если есть выкупы
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
Если Объект.Выкуп.Количество() Тогда
РезультатПроверкиСоглашенияВыкуп = ОпределитьЗаполнениеСоглашенияДоговораДляВыкупа(Объект.ЛичныйКабинет);
Если РезультатПроверкиСоглашенияВыкуп.Ошибка Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(РезультатПроверкиСоглашенияВыкуп.Сообщение);
Конецесли;
Иначе
РезультатПроверкиСоглашенияВыкуп = Новый Структура("Ошибка, Сообщение",ложь,"");
КонецЕсли;
Иначе
РезультатПроверкиСоглашенияВыкуп = Новый Структура("Ошибка, Сообщение",ложь,"");
КонецЕсли;
// письмерова 19.05.2023 BSLR-1863 - тип набор, но комплектации нет - ошибка, документы не создаем
ЕстьОшибкаНаборов = ПроверитьналичиеКомплектацийПоНаборам();
Если РезультатПроверкиСоглашения.Ошибка Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(РезультатПроверкиСоглашения.Сообщение);
КонецЕсли;
// письмерова 21.04.2025 BSLR-4537
ЕстьОшибкаСклада = Ложь;
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Или Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда
Если Не ЗначениеЗаполнено(топ_УТсервер.ПолучитьСкладДляВыкупов(Объект.ЛичныйКабинет)) ТОгда
ОбщегоНазначенияКлиент.СообщитьПользователю("Не удалось определить склад для выкупов, заполните реквизит ""Склад"" в личном кабинете, на вкладке ""Отчет комиссионера""");// BSLR-4616
ЕстьОшибкаСклада = Истина;
КонецЕсли;
КонецЕсли;
// письмерова 29.05.2023 BSLR-1921 // BSLR-3977
ЕстьОшибка = ЕстьОшибкаНаборов Или РезультатПроверкиСоглашения.Ошибка Или РезультатПроверкиСоглашенияВыкуп.Ошибка Или
ЕстьОшибкаСоглашения Или ЕстьНезаполненыеЮЛ Или ЕстьОшибкаПустогоПериода Или ЕстьОшибкаСклада;
ЕстьНесопоставленнаяНоменклатура = Ложь;
ЕстьНезаполненныеЗаказы = Ложь;
СхемаЛК = ОпределениеСхемыЛК(Объект.ЛичныйКабинет); // BSLR-4190
Для Каждого Товар Из Объект.Товары Цикл
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") Тогда
Если СхемаЛК = ПредопределенноеЗначение("Перечисление.топ_СхемыРаботыЯМ.Агентская") ТОгда // BSLR-4190
Прервать;
КонецЕсли; // BSLR-4190
КонецЕсли;
Если Не ЗначениеЗаполнено(Товар.Номенклатура) Тогда
// письмерова 21.12.2023 BSLR-2959
Если Товар.ОбоснованиеДляОплаты <> "Частичная компенсация брака" И
Товар.ОбоснованиеДляОплаты <> "Авансовая оплата за товар без движения" ТОгда
ЕстьНесопоставленнаяНоменклатура = Истина;
Прервать;
КонецЕсли;
Иначе
Продолжить;
КонецЕсли;
КонецЦикла;
Для Каждого Товар Из Объект.Выкуп Цикл
Если Не ЗначениеЗаполнено(Товар.Номенклатура) Тогда
ЕстьНесопоставленнаяНоменклатура = Истина;
Прервать;
Иначе
Продолжить;
КонецЕсли;
КонецЦикла;
Для Каждого Услуга Из Объект.Услуги Цикл
Если Не ЗначениеЗаполнено(Услуга.Номенклатура) Тогда
ЕстьНесопоставленнаяНоменклатура = Истина;
Прервать;
Иначе
Продолжить;
КонецЕсли;
КонецЦикла;
// письмерова 27.01.2025 BSLR-4242
Для Каждого Товар Из Объект.Компенсации Цикл
Если Не ЗначениеЗаполнено(Товар.Номенклатура) Тогда
ЕстьНесопоставленнаяНоменклатура = Истина;
Прервать;
Иначе
Продолжить;
КонецЕсли;
КонецЦикла;
Если ЕстьНезаполненныеЗаказы Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю("Не все заказы покупателей заполнены автоматически. Чтобы создать документы заполните все заказы на вкладке “Товары”")
Иначе
Если НЕ ЕстьОшибка Тогда // письмерова 29.05.2023 BSLR-1921
Если ЕстьНесопоставленнаяНоменклатура Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю("Не все товары и/или услуги сопоставлены. Чтобы создать документы сопоставьте все товары и услуги с номенклатурой или подберите номенклатуру на вкладке “Товары”");
Иначе
// письмерова 19.04.2023 BSLR-1765 - определить тип документов передачи на комиссию до создания документов
РезультатПроверки = ОпределитьТипДокументовНаСервере(Объект.ЛичныйКабинет);
Если НЕ РезультатПроверки.Ошибка ТОгда
РезультатСоздания = СоздатьДокументыНаСервере(РезультатПроверки.ТипДокумента);
Если Не РезультатСоздания.Ошибка тогда
ОбщегоНазначенияКлиент.СообщитьПользователю("Документы созданы");
Иначе
ОбщегоНазначенияКлиент.СообщитьПользователю(РезультатСоздания.Сообщение);
КонецЕсли;
УстановитьВидимостьДоступность();
Иначе
ОбщегоНазначенияКлиент.СообщитьПользователю(РезультатПроверки.Сообщение);
КонецЕсли;
КонецЕсли;
Иначе
ОбщегоНазначенияКлиент.СообщитьПользователю("Документы не могут быть созданы");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция СоздатьДокументыНаСервере(ТипДокумента)
// письмерова 05.11.2024 BSLR-3967
Если Объект.ЛичныйКабинет.СоздаватьИндивидуальныйДоговорДляВыкупов и // BSLR-4243 // BSLR-4599
Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") И Объект.Выкуп.Количество() ТОгда
// должен быть заполнен номер документа по выкупам
Если НЕ ЗначениеЗаполнено(Объект.НомерВходящегоДокументаВыкупа) Тогда
Возврат Новый Структура("Ошибка,Сообщение",Истина,"Для создания договора по выкупам должен быть заполнен номер входящего документа выкупа");
КонецЕсли;
КонецЕсли;
Товары = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьТаблицу(,истина);
ТоварыВозвращенные = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьТаблицу(,истина);
Выкуп = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьТаблицу(,истина);
ВыкупВозвращенные = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьТаблицу(,истина);
Услуги = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьТаблицу(Истина);
УслугиОтрицательные = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьТаблицу(Истина);
Компенсации = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьТаблицу(,истина); // BSLR-3318
Декомпенсации = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьТаблицу(,истина); // BSLR-4515
// письмерова 21.11.2024 BSLR-4071
Выкуп.Колонки.Добавить("Товар");
ВыкупВозвращенные.Колонки.Добавить("Товар");
// письмерова 05.10.2023 BSLR-2675
ТоварыВрем = Объект.Товары.Выгрузить();
//письмерова 11.08.2023 BSLR-2371 - авнсовая оплата и частичная компенсация вместо номеклатуры товара - услуга
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
ТоварыВрем = ОбработатьЧастичнуюКомпенсациюДляВБ(ТоварыВрем);
КонецЕсли;
//Для Каждого ЭлементТовара Из Объект.Товары Цикл // письмерова 05.10.2023 BSLR-2675
Для Каждого ЭлементТовара Из ТоварыВрем Цикл
ЭтоВозврат = (ЭлементТовара.ТипОперации = "Возврат" Или ЭлементТовара.ТипОперации = "возврат"); // письмерова 19.04.2024 BSLR-3481
Если не ЭлементТовара.Количество = 0 тогда
Если ЭтоВозврат Тогда
НовыйТовар = ТоварыВозвращенные.Добавить();
Иначе
НовыйТовар = Товары.Добавить();
КонецЕсли;
ЗаполнитьЗначенияСвойств(НовыйТовар, ЭлементТовара);
// письмерова 01.12.2023 BSLR-2862 - не увеличивать сууму выплаты на сумму доплаты
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда
Если Объект.ДатаНачала >= Дата('20231001000000') Тогда
// письмерова 10.04.2025 BSLR-4508 - перенесено в заполнение таб части, BSLR-4576
//Если НЕ Объект.ЛичныйКабинет.ЗагружатьВыплатыПоМеханикамЛояльностиВУслугу Тогда
// НовыйТовар.Сумма = ЭлементТовара.Сумма + ЭлементТовара.ВыплатыПоМеханикамЛояльностиПартнеров;
// НовыйТовар.Цена = (ЭлементТовара.Сумма + ЭлементТовара.ВыплатыПоМеханикамЛояльностиПартнеров)/?(НовыйТовар.Количество = 0, 1, НовыйТовар.Количество);
//КонецЕсли;
Иначе
НовыйТовар.Цена = ЭлементТовара.Цена + ЭлементТовара.СуммаДоплатыOzon / ?(НовыйТовар.Количество <> 0, НовыйТовар.Количество, 1);
НовыйТовар.Сумма = ЭлементТовара.Сумма + ЭлементТовара.СуммаДоплатыOzon;
КонецЕсли;
Иначе // обычная схема
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") Тогда //BSLR-4095 - только сбер
// BSLR-5168
НовыйТовар.Цена = ЭлементТовара.СуммаКВыплате / ?(НовыйТовар.Количество <> 0, НовыйТовар.Количество, 1);
НовыйТовар.Сумма = ЭлементТовара.СуммаКВыплате;
КонецЕсли;
КонецЕсли;
НовыйТовар.НДСКомиссии = ЭлементТовара.СуммаНДСВознаграждения;
если ЗначениеЗаполнено(ЭлементТовара.ЗаказПокупателя) и ТипЗнч(ЭлементТовара.ЗаказПокупателя) = тип("ДокументСсылка.ЗаказКлиента") тогда
НовыйТовар.ЗаказПокупателя=ЭлементТовара.ЗаказПокупателя;
иначе
НовыйТовар.ЗаказПокупателя=Документы.ЗаказКлиента.ПустаяСсылка();
КонецЕсли;
Если ЭтоВозврат Тогда
НовыйТовар.Количество = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.МодульЧисла(НовыйТовар.Количество);
НовыйТовар.Сумма = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.МодульЧисла(НовыйТовар.Сумма);
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда // письмерова 28.05.2024
НовыйТовар.Комиссия = -(НовыйТовар.Комиссия);
НовыйТовар.НДСКомиссии = -(НовыйТовар.НДСКомиссии); // BSLR-3626
Иначе
НовыйТовар.Комиссия = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.МодульЧисла(НовыйТовар.Комиссия);
КонецЕсли;
КонецЕсли;
// письмерова 03.06.2024 BSLR-3527
НовыйТовар.СтавкаНДССтрокой = ЭлементТовара.СтавкаНДС;
КонецЕсли;
КонецЦикла;
Для Каждого ЭлементТовара Из Объект.Выкуп Цикл
ЭтоВозврат = (ЭлементТовара.ТипОперации = "Возврат");
если не ЭлементТовара.Количество = 0 тогда
Если ЭтоВозврат Тогда
НовыйТовар = ВыкупВозвращенные.Добавить();
Иначе
НовыйТовар = Выкуп.Добавить();
КонецЕсли;
ЗаполнитьЗначенияСвойств(НовыйТовар, ЭлементТовара);
//Если ЭтоВозврат Тогда // письмерова 16.10.2023 BSLR-2718 - закомменчено
// НовыйТовар.Цена = (ЭлементТовара.Сумма - ЭлементТовара.Комиссия)/НовыйТовар.Количество;
// НовыйТовар.Сумма = (ЭлементТовара.Сумма - ЭлементТовара.Комиссия);
//Иначе
НовыйТовар.Цена = ЭлементТовара.СуммаКВыплате/НовыйТовар.Количество;
НовыйТовар.Сумма = ЭлементТовара.СуммаКВыплате;
//КонецЕсли;
НовыйТовар.НДСКомиссии = ЭлементТовара.СуммаНДСВознаграждения;
если ЗначениеЗаполнено(ЭлементТовара.ЗаказПокупателя) и ТипЗнч(ЭлементТовара.ЗаказПокупателя) = тип("ДокументСсылка.ЗаказКлиента") тогда
НовыйТовар.ЗаказПокупателя=ЭлементТовара.ЗаказПокупателя;
иначе
НовыйТовар.ЗаказПокупателя=Документы.ЗаказКлиента.ПустаяСсылка();
КонецЕсли;
Если ЭтоВозврат Тогда
НовыйТовар.Количество = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.МодульЧисла(НовыйТовар.Количество);
НовыйТовар.Сумма = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.МодульЧисла(НовыйТовар.Сумма);
НовыйТовар.Комиссия = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.МодульЧисла(НовыйТовар.Комиссия);
НовыйТовар.Цена = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.МодульЧисла(НовыйТовар.Цена); // BSLR-4033
НовыйТовар.СуммаНДС = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.МодульЧисла(НовыйТовар.СуммаНДС); // BSLR-4033
КонецЕсли;
// письмерова 03.06.2024 BSLR-3527
НовыйТовар.СтавкаНДССтрокой = ЭлементТовара.СтавкаНДС;
КонецЕсли;
КонецЦикла;
СхемаЛК = ОпределениеСхемыЛК(Объект.ЛичныйКабинет); // BSLR-4190
Для Каждого ЭлементУслуги Из Объект.Услуги Цикл
// письмерова 23.12.2024 BSLR-4190, для схемы комиссионых продаж комисия будет либо в товарах, либо отдельным документом
// т.е. из таб части ее нужно убрать
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") Тогда
Если СхемаЛК = ПредопределенноеЗначение("Перечисление.топ_СхемыРаботыЯМ.Комиссионерская") ТОгда
Если ЭлементУслуги.НаименованиеМП = "komission" Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
КонецЕсли;
если НЕ ЭлементУслуги.Сумма = 0 тогда
НоваяУслуга = ?(ЭлементУслуги.Сумма < 0, УслугиОтрицательные.Добавить(), Услуги.Добавить());
ЗаполнитьЗначенияСвойств(НоваяУслуга, ЭлементУслуги);
НоваяУслуга.Количество = 1;
НоваяУслуга.Цена = НоваяУслуга.Сумма; //тут передадим как есть
НоваяУслуга.СтавкаНДССтрокой = ЭлементУслуги.СтавкаНДС; // BSLR-4099
КонецЕсли;
КонецЦикла;
// письмерова 21.10.2024 BSLR-3956
ЗаполнитьИндексыУслуг(Услуги,УслугиОтрицательные);
Услуги.Сортировать("ИндексДокумента");
УслугиОтрицательные.Сортировать("ИндексДокумента");
// письмерова 24.10.2024 BSLR-3318
Для Каждого Стр из Объект.Компенсации Цикл
// письмерова 10.10.2025 BSLR-4515
Если Стр.Количество < 0 Тогда
нСтр = Декомпенсации.Добавить();
ЗаполнитьЗначенияСвойств(нСтр,Стр);
нСтр.Цена = Стр.ИтогоКНачислению/нСтр.Количество;
нСтр.Количество = - нСтр.Количество;
нСтр.Сумма = - Стр.ИтогоКНачислению;
Иначе
нСтр = Компенсации.Добавить();
ЗаполнитьЗначенияСвойств(нСтр,Стр);
нСтр.Сумма = Стр.ИтогоКНачислению;
КонецЕсли;
КонецЦикла;
// для СберМегаМаркет не создаем ОК, только услуги - только для агентской схемы
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") Тогда
Если СхемаЛК = ПредопределенноеЗначение("Перечисление.топ_СхемыРаботыЯМ.Агентская") ТОгда // BSLR-4190
ТоварыВозвращенные.Очистить();
Товары.Очистить();
КонецЕсли;
КонецЕсли;
ДанныеПериода = Новый Структура("ДатаНачала, ДатаОкончания, ДатаТиповыхДокументов", Объект.ДатаНачала, Объект.ДатаОкончания,
?(ОБъект.ДатаТиповыхДокументов = Дата(1,1,1), Объект.ДатаОкончания, КонецДня(ОБъект.ДатаТиповыхДокументов))); // BSLR-3621
Входящийдокумент = Новый Структура("НомерВходящегоДокумента, ДатаВходящегоДокумента, НомерВходящегоДокументаВыкупа, ДатаВходящегоДокументаВыкупа",
Объект.НомерВходящегоДокумента, Объект.ДатаВходящегоДокумента, Объект.НомерВходящегоДокументаВыкупа, Объект.ДатаВходящегоДокументаВыкупа);
ДанныеДляОтчета = Новый Структура("Товары, ТоварыВозвращенные, Услуги, УслугиОтрицательные, ЛичныйКабинет, Период, Входящийдокумент, Выкуп, ВыкупВозвращенные, КомиссияВБ, НДСКомиссияВБ,ТипДокумента,
// письмерова 17.10.2024 BSLR-3906 // BSLR-4071 // BSLR-4351 // BSLR-3318 // BSLR-4515
| ОтражатьКомиссионноеВознаграждениеОтдельнойУслугой, ЗаменятьВРеализацииПоВыкупамНаборыНаКомплекты, СоздаватьСначалаПродажиПотомВозвраты, Компенсации, Декомпенсации",
топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ТаблицаЗначенийВМассив(Товары),
топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ТаблицаЗначенийВМассив(ТоварыВозвращенные),
топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ТаблицаЗначенийВМассив(Услуги),
топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ТаблицаЗначенийВМассив(УслугиОтрицательные),
Объект.ЛичныйКабинет,
ДанныеПериода,
Входящийдокумент,
топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ТаблицаЗначенийВМассив(Выкуп),
топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ТаблицаЗначенийВМассив(ВыкупВозвращенные),
Объект.Товары.Итог("Комиссия"),
Объект.Товары.Итог("СуммаНДСВознаграждения"), // письмерова 16.06.2023 BSLR-2106
ТипДокумента,
Объект.ОтражатьКомиссионноеВознаграждениеОтдельнойУслугой, // BSLR-3906
Объект.ЗаменятьВРеализацииПоВыкупамНаборыНаКомплекты, // BSLR-4071
Объект.СоздаватьСначалаПродажиПотомВозвраты, // письмерова 28.02.2025 BSLR-4351
Компенсации, // BSLR-4515
Декомпенсации); // BSLR-3318
РезультатСоздания = топ_ОбщийВызовСервера.СоздатьДокументыИзЗагрузкиОтчетовКомиссионера(ДанныеДляОтчета);
Если ЗначениеЗаполнено(РезультатСоздания.ОтчетКомиссионера) Тогда
нСтр = Объект.Документы.Добавить();
нСтр.ТипДокумента = "Отчет комиссионера о продаже";
нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(РезультатСоздания.ОтчетКомиссионера);
нСтр.ДокументУИД = Строка(РезультатСоздания.ОтчетКомиссионера);
КонецЕсли;
// письмерова 27.02.2025 BSLR-4351
Если ЗначениеЗаполнено(РезультатСоздания.ОтчетКомиссионераВОЗВРАТ) Тогда
нСтр = Объект.Документы.Добавить();
нСтр.ТипДокумента = "Отчет комиссионера (только возвраты)";
нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(РезультатСоздания.ОтчетКомиссионераВОЗВРАТ);
нСтр.ДокументУИД = Строка(РезультатСоздания.ОтчетКомиссионераВОЗВРАТ);
КонецЕсли;
Если ЗначениеЗаполнено(РезультатСоздания.ОтчетКоммисионераОВозвратах) Тогда
нСтр = Объект.Документы.Добавить();
нСтр.ТипДокумента = "Отчет комиссионера о возвратах";
нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(РезультатСоздания.ОтчетКоммисионераОВозвратах);
нСтр.ДокументУИД = Строка(РезультатСоздания.ОтчетКоммисионераОВозвратах);
КонецЕсли;
Если ЗначениеЗаполнено(РезультатСоздания.ПоступлениеДопУслуг) Тогда
нСтр = Объект.Документы.Добавить();
нСтр.ТипДокумента = "Приобретение товаров и услуг на Доп. услуги"; // BSLR-2817
нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(РезультатСоздания.ПоступлениеДопУслуг);
нСтр.ДокументУИД = Строка(РезультатСоздания.ПоступлениеДопУслуг);
КонецЕсли;
Если ЗначениеЗаполнено(РезультатСоздания.РасходнаяНаОтрицательныеУслуги) Тогда
нСтр = Объект.Документы.Добавить();
нСтр.ТипДокумента = "Реализация товаров и услуг на Доп. услуги"; // BSLR-2817
нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(РезультатСоздания.РасходнаяНаОтрицательныеУслуги);
нСтр.ДокументУИД = Строка(РезультатСоздания.РасходнаяНаОтрицательныеУслуги);
КонецЕсли;
Если ЗначениеЗаполнено(РезультатСоздания.ПриходнаяВыкуп) Тогда
нСтр = Объект.Документы.Добавить();
нСтр.ТипДокумента = "Приобретение товаров и услуг на выкуп"; // BSLR-2817
нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(РезультатСоздания.ПриходнаяВыкуп);
нСтр.ДокументУИД = Строка(РезультатСоздания.ПриходнаяВыкуп);
КонецЕсли;
Если ЗначениеЗаполнено(РезультатСоздания.РасходнаяВыкуп) Тогда
нСтр = Объект.Документы.Добавить();
нСтр.ТипДокумента = "Реализация товаров и услуг на выкуп"; // BSLR-2817
нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(РезультатСоздания.РасходнаяВыкуп);
нСтр.ДокументУИД = Строка(РезультатСоздания.РасходнаяВыкуп);
КонецЕсли;
Если ЗначениеЗаполнено(РезультатСоздания.ВозвратДляРасходаПоВыкупу) Тогда
нСтр = Объект.Документы.Добавить();
нСтр.ТипДокумента = "Возврат из комиссии для продажи по выкупу";
нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(РезультатСоздания.ВозвратДляРасходаПоВыкупу);
нСтр.ДокументУИД = Строка(РезультатСоздания.ВозвратДляРасходаПоВыкупу);
КонецЕсли;
Если ЗначениеЗаполнено(РезультатСоздания.ВозвратПоВыкупуДляПередачиНаКомиссию) Тогда
нСтр = Объект.Документы.Добавить();
нСтр.ТипДокумента = "Возврат по выкупу для передачи на комиссию";
нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(РезультатСоздания.ВозвратПоВыкупуДляПередачиНаКомиссию);
нСтр.ДокументУИД = Строка(РезультатСоздания.ВозвратПоВыкупуДляПередачиНаКомиссию);
КонецЕсли;
Если ЗначениеЗаполнено(РезультатСоздания.ПередачаНаКомиссиюВозвратовПоВыкупу) Тогда
нСтр = Объект.Документы.Добавить();
нСтр.ТипДокумента = "Передача на комиссию возвратов по выкупу";
нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(РезультатСоздания.ПередачаНаКомиссиюВозвратовПоВыкупу);
нСтр.ДокументУИД = Строка(РезультатСоздания.ПередачаНаКомиссиюВозвратовПоВыкупу);
КонецЕсли;
// если разделили услуги
Для Каждого Эл Из РезультатСоздания.МассивУслуг Цикл
нСтр = Объект.Документы.Добавить();
//нСтр.ТипДокумента = "Услуга ВБ"; // BSLR-3677 от 29.08.2024
нСтр.ТипДокумента = Эл.Сининим;
нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(Эл.Док);
нСтр.ДокументУИД = Строка(Эл.Док);
КонецЦикла;
// письмерова 24.10.2024 BSLR-3318
Если ЗначениеЗаполнено(РезультатСоздания.ОтчетКомиссионераОСписании) Тогда
нСтр = Объект.Документы.Добавить();
нСтр.ТипДокумента = "Отчет комиссионера о списании";
нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(РезультатСоздания.ОтчетКомиссионераОСписании);
нСтр.ДокументУИД = Строка(РезультатСоздания.ОтчетКомиссионераОСписании);
КонецЕсли;
// письмерова 10.10.2025 BSLR-4515
Если ЗначениеЗаполнено(РезультатСоздания.ОприходованиеИзлишковТоваровУХранителя) Тогда
нСтр = Объект.Документы.Добавить();
нСтр.ТипДокумента = "Оприходование излишков по декомпенсации";
нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(РезультатСоздания.ОприходованиеИзлишковТоваровУХранителя);
нСтр.ДокументУИД = Строка(РезультатСоздания.ОприходованиеИзлишковТоваровУХранителя);
КонецЕсли;
Если ЗначениеЗаполнено(РезультатСоздания.ПередачаНаКомиссиюДекомпенсация) Тогда
нСтр = Объект.Документы.Добавить();
нСтр.ТипДокумента = "Передача на комиссию излишков по декомпенсации";
нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(РезультатСоздания.ПередачаНаКомиссиюДекомпенсация);
нСтр.ДокументУИД = Строка(РезультатСоздания.ПередачаНаКомиссиюДекомпенсация);
КонецЕсли;
// письмерова 11.03.2026 BSLR-5351
Если ЗначениеЗаполнено(РезультатСоздания.ВзаимозачетЗадолженностиВозвратВыкупы) Тогда
нСтр = Объект.Документы.Добавить();
нСтр.ТипДокумента = "Взаимозачет по возврату выкупов";
нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(РезультатСоздания.ВзаимозачетЗадолженностиВозвратВыкупы);
нСтр.ДокументУИД = Строка(РезультатСоздания.ВзаимозачетЗадолженностиВозвратВыкупы);
КонецЕсли;
// письмерова 27.03.2026 BSLR-5298 ++
Если ЗначениеЗаполнено(РезультатСоздания.КорректировкаЗадолженностиКомпенсации) Тогда
нСтр = Объект.Документы.Добавить();
нСтр.ТипДокумента = "Коректировка задолженности по компенсации";
нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(РезультатСоздания.КорректировкаЗадолженностиКомпенсации);
нСтр.ДокументУИД = Строка(РезультатСоздания.КорректировкаЗадолженностиКомпенсации);
КонецЕсли;
Если ЗначениеЗаполнено(РезультатСоздания.КорректировкаЗадолженностиДекомпенсации) Тогда
нСтр = Объект.Документы.Добавить();
нСтр.ТипДокумента = "Коректировка задолженности по декомпенсации";
нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(РезультатСоздания.КорректировкаЗадолженностиДекомпенсации);
нСтр.ДокументУИД = Строка(РезультатСоздания.КорректировкаЗадолженностиДекомпенсации);
КонецЕсли; // BSLR-5298 --
// письмерова 07.05.2026
Если РезультатСоздания.Свойство("МассивРеализаций") ТОгда
Для Каждого Эл Из РезультатСоздания.МассивРеализаций Цикл
нСтр = Объект.Документы.Добавить();
нСтр.ТипДокумента = "Реализация через комиссионера юр.лицу";
нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(Эл);
нСтр.ДокументУИД = Строка(Эл);
КонецЦикла;
КонецЕсли;
// письмерова 21.11.2024 BSLR-4071
Если РезультатСоздания.МассивСборок.Количество() Тогда
ЗаполнитьСборкиВВыкупах(РезультатСоздания.МассивСборок);
КонецЕсли;
Попытка
НачатьТранзакцию();
СтрПараметрыЗаписи = новый Структура;
СтрПараметрыЗаписи.Вставить("РежимЗаписи",РежимЗаписиДокумента.Запись);
ЭтаФорма.Записать(СтрПараметрыЗаписи);
ЗафиксироватьТранзакцию();
Исключение
Ошибка=ИнформацияОбОшибке();
сообщение = новый СообщениеПользователю;
сообщение.Текст = Ошибка.Описание + Символы.ПС + Ошибка.ИмяМодуля + Символы.ПС+
Ошибка.НомерСтроки + Символы.ПС + Ошибка.ИсходнаяСтрока;
сообщение.Сообщить();
ОтменитьТранзакцию();
КонецПопытки;
ОбновитьИндексыДокументов(); // BSLR-5372
ОбновитьДеревоДокументов(); // BSLR-5340
Возврат РезультатСоздания
КонецФункции
&НаСервере
Процедура ОчиститьСвязанныеДокументыНаСервере()
если ЗначениеЗаполнено(Объект.ОтчетКомиссионераПродажа) тогда
документОб = Объект.ОтчетКомиссионераПродажа.ПолучитьОбъект();
документОб.УстановитьПометкуУдаления(Истина);
Объект.ОтчетКомиссионераПродажа = Неопределено;
КонецЕсли;
если ЗначениеЗаполнено(Объект.ОтчетКомиссионераВозврат) тогда
документОб = Объект.ОтчетКомиссионераВозврат.ПолучитьОбъект();
документОб.УстановитьПометкуУдаления(Истина);
Объект.ОтчетКомиссионераВозврат = Неопределено;
КонецЕсли;
если ЗначениеЗаполнено(Объект.ПриходнаяНакладная) тогда
документОб = Объект.ПриходнаяНакладная.ПолучитьОбъект();
документОб.УстановитьПометкуУдаления(Истина);
Объект.ПриходнаяНакладная = Неопределено;
КонецЕсли;
если ЗначениеЗаполнено(Объект.РасходнаяНакладнаяКомиссия) тогда
документОб = Объект.РасходнаяНакладнаяКомиссия.ПолучитьОбъект();
документОб.УстановитьПометкуУдаления(Истина);
Объект.РасходнаяНакладнаяКомиссия = Неопределено;
КонецЕсли;
если ЗначениеЗаполнено(Объект.РасходнаяНакладнаяВыкуп) тогда
документОб = Объект.РасходнаяНакладнаяВыкуп.ПолучитьОбъект();
документОб.УстановитьПометкуУдаления(Истина);
Объект.РасходнаяНакладнаяВыкуп = Неопределено;
КонецЕсли;
если ЗначениеЗаполнено(Объект.ПриходнаяНакладнаяВыкуп) тогда
документОб = Объект.ПриходнаяНакладнаяВыкуп.ПолучитьОбъект();
документОб.УстановитьПометкуУдаления(Истина);
Объект.ПриходнаяНакладнаяВыкуп = Неопределено;
КонецЕсли;
если ЗначениеЗаполнено(Объект.ВозвратДляРасходаПоВыкупу) тогда
документОб = Объект.ВозвратДляРасходаПоВыкупу.ПолучитьОбъект();
документОб.УстановитьПометкуУдаления(Истина);
Объект.ВозвратДляРасходаПоВыкупу = Неопределено;
КонецЕсли;
если ЗначениеЗаполнено(Объект.ВозвратПоВыкупуДляПередачиНаКомиссию) тогда
документОб = Объект.ВозвратПоВыкупуДляПередачиНаКомиссию.ПолучитьОбъект();
документОб.УстановитьПометкуУдаления(Истина);
Объект.ВозвратПоВыкупуДляПередачиНаКомиссию = Неопределено;
КонецЕсли;
если ЗначениеЗаполнено(Объект.ПередачаНаКомиссиюВозвратовПоВыкупу) тогда
документОб = Объект.ПередачаНаКомиссиюВозвратовПоВыкупу.ПолучитьОбъект();
документОб.УстановитьПометкуУдаления(Истина);
Объект.ПередачаНаКомиссиюВозвратовПоВыкупу = Неопределено;
КонецЕсли;
// письмерова 19.04.2023 BSLR-1765
Если Объект.ПередачаНаКомиссиюВозвратовПоВыкупуУИД <> "" тогда
НС = Объект.ПередачаНаКомиссиюВозвратовПоВыкупуНавигационнаяСсылка;
// пометка на удаление документа по навигационной ссылке
ПерваяТочка = Найти(НС, "e1cib/data/");
ВтораяТочка = Найти(НС, "?ref=");
ПредставлениеТипа = Сред(НС, ПерваяТочка + 11, ВтораяТочка - ПерваяТочка - 11);
ШаблонЗначения = ЗначениеВСтрокуВнутр(ПредопределенноеЗначение(ПредставлениеТипа + ".ПустаяСсылка"));
ЗначениеСсылки = СтрЗаменить(ШаблонЗначения, "00000000000000000000000000000000", Сред(НС, ВтораяТочка + 5));
СсылкаДляУдаления = ЗначениеИзСтрокиВнутр(ЗначениеСсылки);
документОб = СсылкаДляУдаления.ПолучитьОбъект();
документОб.УстановитьПометкуУдаления(Истина);
Объект.ПередачаНаКомиссиюВозвратовПоВыкупуУИД = "";
Объект.ПередачаНаКомиссиюВозвратовПоВыкупуНавигационнаяСсылка = "";
КонецЕсли;
// письмерова 07.09.2023 BSLR-2415
Для Каждого Стр из Объект.Документы Цикл
Если Стр.ДокументНавигационнаяСсылка = "" Тогда // пустая строка BSLR-2855
Продолжить;
КонецЕсли;
НС = Стр.ДокументНавигационнаяСсылка;
// пометка на удаление документа по навигационной ссылке
ПерваяТочка = Найти(НС, "e1cib/data/");
ВтораяТочка = Найти(НС, "?ref=");
ПредставлениеТипа = Сред(НС, ПерваяТочка + 11, ВтораяТочка - ПерваяТочка - 11);
ШаблонЗначения = ЗначениеВСтрокуВнутр(ПредопределенноеЗначение(ПредставлениеТипа + ".ПустаяСсылка"));
ЗначениеСсылки = СтрЗаменить(ШаблонЗначения, "00000000000000000000000000000000", Сред(НС, ВтораяТочка + 5));
СсылкаДляУдаления = ЗначениеИзСтрокиВнутр(ЗначениеСсылки);
Попытка документОб = СсылкаДляУдаления.ПолучитьОбъект(); Исключение КонецПопытки; // BSLR-3906 - удалить попытку (?)
Попытка документОб.УстановитьПометкуУдаления(Истина); Исключение КонецПопытки; // если удалили из прямых ссылок
КонецЦикла;
Объект.Документы.Очистить();
// письмерова 21.11.2024 BSLR-4071 - очистка сборок
Для Каждого Стр Из Объект.Выкуп Цикл
Если ЗначениеЗаполнено(Стр.СборкаТоваров) Тогда
документОб = Стр.СборкаТоваров.ПолучитьОбъект();
Попытка документОб.УстановитьПометкуУдаления(Истина); Исключение КонецПопытки;
Стр.СборкаТоваров = "";
КонецЕсли;
КонецЦикла;
Попытка
НачатьТранзакцию();
СтрПараметрыЗаписи = новый Структура;
СтрПараметрыЗаписи.Вставить("РежимЗаписи",РежимЗаписиДокумента.Запись);
ЭтаФорма.Записать(СтрПараметрыЗаписи);
ЗафиксироватьТранзакцию();
Исключение
Ошибка=ИнформацияОбОшибке();
сообщение = новый СообщениеПользователю;
сообщение.Текст = Ошибка.Описание + Символы.ПС + Ошибка.ИмяМодуля + Символы.ПС+
Ошибка.НомерСтроки + Символы.ПС + Ошибка.ИсходнаяСтрока;
сообщение.Сообщить();
ОтменитьТранзакцию();
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ОчиститьСвязанныеДокументы(Команда)
ОчиститьСвязанныеДокументыНаСервере();
УстановитьВидимостьДоступность();
ОбновитьДеревоДокументов(); // BSLR-5340
КонецПроцедуры
// письмерова 19.05.2023 BSLR-1863
&НаСервере
Функция ПроверитьНаличиеКомплектацийПоНаборам()
ТаблицаНаборов = новый ТаблицаЗначений;
ТаблицаНаборов.Колонки.Добавить("Номенклатура");
ТаблицаНаборов.Колонки.Добавить("Характеристика");
Для Каждого Стр Из Объект.Товары Цикл
Если Стр.ЭтоНабор Тогда
нСтр = ТаблицаНаборов.Добавить();
ЗаполнитьЗначениясвойств(нСтр,Стр);
КонецЕсли;
КонецЦикла;
Для Каждого Стр Из Объект.Выкуп Цикл
Если Стр.ЭтоНабор Тогда
нСтр = ТаблицаНаборов.Добавить();
ЗаполнитьЗначениясвойств(нСтр,Стр);
КонецЕсли;
КонецЦикла;
ТаблицаНаборов.Свернуть("Номенклатура,Характеристика");
Если ТаблицаНаборов.Количество() = 0 Тогда
Возврат Ложь; // нет наборов в таб частях
КонецЕсли;
Ошибка = Ложь;
Для Каждого Стр Из ТаблицаНаборов Цикл
ПараметрыВариантаКомплектацииНоменклатуры = НаборыВызовСервера.ПараметрыВариантаКомплектацииНоменклатуры(Стр.Номенклатура, Стр.Характеристика);
Если ПараметрыВариантаКомплектацииНоменклатуры = Неопределено Тогда
Сообщение = "Для номенклатуры " + Стр.Номенклатура.Наименование + " не заполнен основной состав набора в 1С.";
ОбщегоНазначения.СообщитьПользователю(Сообщение);
Ошибка = Истина;
КонецЕсли;
КонецЦикла;
Возврат Ошибка;
КонецФункции
// письмерова 23.06.2023 BSLR-2022
&НаСервереБезКонтекста
Функция ПроверитьСпособРасчетаКомиссионногоВознаграждения(ЛичныйКабинет,ОтражатьКомиссионноеВознаграждениеОтдельнойУслугой = Ложь)
ЕстьОшибкаСоглашения = Ложь;
Если ЗначениеЗаполнено(ЛичныйКабинет.Соглашение) Тогда
//Если ЛичныйКабинет.ТорговаяПлощадка = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") Тогда
// Возврат ЕстьОшибкаСоглашения;
//КонецЕсли; - BSLR-4190
Если ЛичныйКабинет.ТорговаяПлощадка = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда // BSLR-4190
Если НЕ ОтражатьКомиссионноеВознаграждениеОтдельнойУслугой Тогда
Если ЛичныйКабинет.Соглашение.СпособРасчетаВознаграждения <> ПредопределенноеЗначение("Перечисление.СпособыРасчетаКомиссионногоВознаграждения.ПроцентОтСуммыПродажи") Тогда
ОбщегоНазначения.СообщитьПользователю("Способ расчета комиссионного вознаграждения в соглашении с комиссионером на закладке ""Настройки заполнения"" в личном кабинете должен быть ""Процент от суммы продажи"" ");
ЕстьОшибкаСоглашения = Истина;
КонецЕсли;
ИначеЕсли ОтражатьКомиссионноеВознаграждениеОтдельнойУслугой Тогда
Если ЛичныйКабинет.Соглашение.СпособРасчетаВознаграждения <> ПредопределенноеЗначение("Перечисление.СпособыРасчетаКомиссионногоВознаграждения.НеРассчитывается") Тогда
ОбщегоНазначения.СообщитьПользователю("Способ расчета комиссионного вознаграждения в соглашении с комиссионером на закладке ""Настройки заполнения"" в личном кабинете должен быть ""Не рассчитывается"" ");
ЕстьОшибкаСоглашения = Истина;
КонецЕсли;
КонецЕсли;
ИначеЕсли ЛичныйКабинет.ТорговаяПлощадка = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") Тогда // BSLR-4190
Если ЛичныйКабинет.СхемаРаботыЯндексМаркет = ПредопределенноеЗначение("Перечисление.топ_СхемыРаботыЯМ.Комиссионерская") Тогда
Если НЕ ОтражатьКомиссионноеВознаграждениеОтдельнойУслугой Тогда
Если ЛичныйКабинет.Соглашение.СпособРасчетаВознаграждения <> ПредопределенноеЗначение("Перечисление.СпособыРасчетаКомиссионногоВознаграждения.ПроцентОтСуммыПродажи") Тогда
ОбщегоНазначения.СообщитьПользователю("Способ расчета комиссионного вознаграждения в соглашении с комиссионером на закладке ""Настройки заполнения"" в личном кабинете должен быть ""Процент от суммы продажи"" ");
ЕстьОшибкаСоглашения = Истина;
КонецЕсли;
ИначеЕсли ОтражатьКомиссионноеВознаграждениеОтдельнойУслугой Тогда
Если ЛичныйКабинет.Соглашение.СпособРасчетаВознаграждения <> ПредопределенноеЗначение("Перечисление.СпособыРасчетаКомиссионногоВознаграждения.НеРассчитывается") Тогда
ОбщегоНазначения.СообщитьПользователю("Способ расчета комиссионного вознаграждения в соглашении с комиссионером на закладке ""Настройки заполнения"" в личном кабинете должен быть ""Не рассчитывается"" ");
ЕстьОшибкаСоглашения = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Иначе
Если ЛичныйКабинет.Соглашение.СпособРасчетаВознаграждения <> ПредопределенноеЗначение("Перечисление.СпособыРасчетаКомиссионногоВознаграждения.НеРассчитывается") Тогда
ОбщегоНазначения.СообщитьПользователю("Способ расчета комиссионного вознаграждения в соглашении с комиссионером и на закладке ""Настройки заполнения"" в личном кабинете должен быть ""Не рассчитывается"" ");
ЕстьОшибкаСоглашения = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат ЕстьОшибкаСоглашения;
КонецФункции
//письмерова 11.08.2023 BSLR-2371 // письмерова 05.10.2023 BSLR-2675
Функция ОбработатьЧастичнуюКомпенсациюДляВБ(ТоварыВрем)
УслугаКомпенс = Справочники.Номенклатура.ПустаяСсылка();
Запрос = Новый Запрос("ВЫБРАТЬ
| топ_СопоставлениеНоменклатурыУслуг.НоменклатураУслуги КАК НоменклатураУслуги,
| топ_СопоставлениеНоменклатурыУслуг.ЛитералУслуги КАК ЛитералУслуги
|ИЗ
| РегистрСведений.топ_СопоставлениеНоменклатурыУслуг КАК топ_СопоставлениеНоменклатурыУслуг
|ГДЕ
| топ_СопоставлениеНоменклатурыУслуг.ТорговаяПлощадка = &ТорговаяПлощадка
| И топ_СопоставлениеНоменклатурыУслуг.ЛитералУслуги = &ЛитералУслугиКомпенс");
Запрос.УстановитьПараметр("ТорговаяПлощадка",Перечисления.топ_ТорговыеПлощадки.Wildberries);
Запрос.УстановитьПараметр("ЛитералУслугиКомпенс","partial_compensation");
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
УслугаКомпенс = Выборка.НоменклатураУслуги;
КонецЕсли;
Для каждого Стр Из ТоварыВрем Цикл
Если Стр.ОбоснованиеДляОплаты = "Частичная компенсация брака" ТОгда
Если Стр.ТипОперации = "Продажа" Тогда
Стр.Количество = 1;
ИначеЕсли Стр.ТипОперации = "Возврат" Или Стр.ТипОперации = "возврат" Тогда // письмерова 17.04.2024 BSLR-3481
Стр.Количество = - 1;
КонецЕсли;
Стр.Цена = Стр.Сумма * Стр.Количество; // письмерова 09.04.2024 BSLR-3448
Стр.СтавкаНДС = "20%";
Стр.Номенклатура = УслугаКомпенс;
Стр.Характеристика = "";
КонецЕсли;
КонецЦикла;
// письмерова 05.09.2023 BSLR-2487
// свернуть все строки по ЧКБ в одну
//Если Объект.ЛичныйКабинет.ГруппироватьТоварыВОтчетеКомиссионераБезУчетаЗаказа Тогда
// письмерова 05.10.2023 BSLR-2675 - сворачивать всегда
// отключено в рамках задачи BSLR-3287
//МассивДляУдаления = Новый Массив;
//СуммаЧКБ = 0;
//Для каждого Стр Из ТоварыВрем Цикл
// Если Стр.ОбоснованиеДляОплаты = "Частичная компенсация брака" ТОгда
// Если Стр.ТипОперации = "Продажа" Тогда
// СуммаЧКБ = СуммаЧКБ + Стр.Сумма;
// ИначеЕсли Стр.ТипОперации = "Возврат" Тогда
// //СуммаЧКБ = СуммаЧКБ - Стр.Сумма;
// СуммаЧКБ = СуммаЧКБ + Стр.Сумма; // письмерова 07.02.2024 BSLR-3196
// КонецЕсли;
// МассивДляУдаления.Добавить(Стр);
// КонецЕсли;
//КонецЦикла;
//
//Если МассивДляУдаления.Количество() ТОгда
// нСтр = ТоварыВрем.Добавить();
// нСтр.Сумма = СуммаЧКБ;
// нСтр.Цена = ?(нСтр.Сумма>0,СуммаЧКБ,-СуммаЧКБ);
// нСтр.Количество = ?(нСтр.Сумма>0,1,-1);
// нСтр.СтавкаНДС = "20%";
// нСтр.Номенклатура = УслугаКомпенс;
// нСтр.Характеристика = "";
//КонецЕсли;
//КонецЕсли;
Возврат ТоварыВрем;
КонецФункции
// письмерова 19.04.2023 BSLR-1765
&НаСервереБезКонтекста
Функция ОпределитьТипДокументовНаСервере(ЛК)
Возврат топ_ОбщийВызовСервера.ОпределитьТипДокументаПередачиНаКомиссию(ЛК);
КонецФункции
// письмерова 23.12.2024 BSLR-4190
Функция ОпределениеСхемыЛК(ЛК)
Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЛК,"СхемаРаботыЯндексМаркет");
КонецФункции
// письмерова 20.04.2023 BSLR-1717
&НаСервереБезКонтекста
Функция ОпределитьЗаполнениеСоглашенияДоговораСПостащиком(ЛК)
Возврат топ_ОбщийВызовСервера.ОпределитьЗаполнениеСоглашенияДоговораСПостащиком(ЛК);
КонецФункции
// письмерова 20.04.2023 BSLR-1717
&НаСервереБезКонтекста
Функция ОпределитьЗаполнениеСоглашенияДоговораДляВыкупа(ЛК)
Возврат топ_ОбщийВызовСервера.ОпределитьЗаполнениеСоглашенияДоговораДляВыкупа(ЛК);
КонецФункции
// письмерова 20.11.2024 BSLR-4071
&НаСервере
Функция ЕстьНезаполненныеКомпкектыНоменклатуры()
Результат = Ложь;
МассивСообщений = новый Массив;
Для Каждого Стр Из Объект.Выкуп Цикл
Если Стр.ЭтоНабор Тогда
Если ЗначениеЗаполнено(Стр.Товар) Тогда
Если Не ЗначениеЗаполнено(Стр.Товар.НоменклатураКомплекта) Тогда
МассивСообщений.Добавить("Для товара " + Стр.Товар + " не заполнена номенклатура комплекта");
Результат = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если МассивСообщений.Количество() Тогда
Для Каждого Эл Из МассивСообщений Цикл
ОбщегоНазначения.СообщитьПользователю(Эл);
КонецЦикла;
КонецЕсли;
Возврат Результат;
КонецФункции
// письмерова 20.11.2024 BSLR-4071
&НаСервере
Функция СоздатьКомплектыКНаборамНаСервере()
ВремТабл = Новый ТаблицаЗначений;
ВремТабл.Колонки.Добавить("Товар");
ВремТабл.Колонки.Добавить("Номенклатура");
ВремТабл.Колонки.Добавить("Характеристика");
Для Каждого Стр Из Объект.Выкуп Цикл
Если Стр.ЭтоНабор Тогда
Если ЗначениеЗаполнено(Стр.Товар) Тогда
Если Не ЗначениеЗаполнено(Стр.Товар.НоменклатураКомплекта) Тогда
нСтр = ВремТабл.Добавить();
ЗаполнитьЗначенияСвойств(нСтр,Стр);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ВремТабл.Свернуть("Товар,Номенклатура,Характеристика");
РезультатСоздания = топ_ОбщийВызовСервера.СоздатьКомплектыКНаборам(топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ТаблицаЗначенийВМассив(ВремТабл));
Возврат РезультатСоздания;
КонецФункции
// письмерова 21.11.2024 BSLR-4071
Процедура ЗаполнитьСборкиВВыкупах(МассивСборок)
Для Каждого Эл из МассивСборок Цикл
Количество = ?(Эл.ТипОперации = "Возврат", -Эл.Количество, Эл.Количество);
Отбор = Новый Структура("Товар,ЭтоНабор,Количество,ТипОперации", Эл.Товар,Истина,Количество,Эл.ТипОперации); // BSLR-4287
НайденыСтроки = Объект.Выкуп.НайтиСтроки(Отбор);
Если НайденыСтроки.Количество() Тогда
Для Каждого Стр из НайденыСтроки Цикл
Если ЗначениеЗаполнено(Стр.СборкаТоваров) ТОгда
Продолжить;
Иначе
Стр.СборкаТоваров = Эл.СборкаТоваров;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьСтатусДокументов(Команда)
ОбновитьИндексыДокументов(); // BSLR-5372
ОбновитьДеревоДокументов(); // BSLR-5340
КонецПроцедуры
#КонецОбласти
#Область Служебные
Функция ВернутьКонстантуГруппыДоступовКонтрагентов()
Возврат Константы.ИспользоватьГруппыДоступаПартнеров.Получить();
КонецФункции
&НаКлиенте
Процедура УслугиНоменклатураПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.Услуги.ТекущиеДанные;
если ЗначениеЗаполнено(СтрокаТабличнойЧасти.Номенклатура) тогда
СтрокаТабличнойЧасти.СтавкаНДС = топ_ОбщийВызовСервера.БИТ_СтавкаНДС_Номенклатуры(СтрокаТабличнойЧасти.Номенклатура,Объект.ЛичныйКабинет,Период.ДатаОкончания);
СтавкаНДСЗнач = топ_ОбщийВызовСервера.БИТ_ПолучитьЗначениеСтавкиНДС(СтрокаТабличнойЧасти.СтавкаНДС);
СтрокаТабличнойЧасти.СуммаНДС = СтрокаТабличнойЧасти.Сумма * СтавкаНДСЗнач /(100 + СтавкаНДСЗнач);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
если (не ЗначениеЗаполнено(Объект.ДатаНачала)) или (не ЗначениеЗаполнено(Объект.ДатаОкончания)) тогда
Отказ=Истина;
сообщение = новый СообщениеПользователю;
сообщение.Текст = "Заполните поле Период";
сообщение.Сообщить();
КонецЕсли;
// дата документа = конец периода, для корректного проведения документа
Объект.Дата = Объект.ДатаОкончания;
КонецПроцедуры
&НаСервере
Процедура РаспределитьРазницуНаСервере()
Если Маркетплейс = Перечисления.топ_ТорговыеПлощадки.Wildberries ТОгда // письмерова 14.12.2023 BSLR-2953
СуммаКомиссии=?(Объект.Товары.Итог("Комиссия")=Неопределено,0,Объект.Товары.Итог("Комиссия"));
СуммаНДСКомиссии=?(Объект.Товары.Итог("СуммаНДСВознаграждения")=Неопределено,0,Объект.Товары.Итог("СуммаНДСВознаграждения"));
если (НЕ Объект.СуммаКомиссииПоУПД=0) и (НЕ СуммаКомиссии = Объект.СуммаКомиссииПоУПД) тогда
МассивКоэффициентов = Объект.Товары.Выгрузить().ВыгрузитьКолонку("Сумма");
СуммаДляРаспределения = Объект.СуммаКомиссииПоУПД-СуммаКомиссии;
если топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.МодульЧисла(СуммаДляРаспределения) >= топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.МодульЧисла(Объект.СуммаКомиссииПоУПД*0.1) тогда
Сообщение = новый СообщениеПользователю;
Сообщение.Текст = "Распределение не может быть выполнено, тк распределяемая разница превышает 10%, обратитесь в техническую поддержку " + ПолучитьАдресПочты(); // BT BSLR-3058 //LAShadrin 11/03/24 BSLR-3060
Сообщение.Сообщить();
Возврат;
КонецЕсли;
РезультатРаспределения = топ_ОбщийВызовСервера.РаспределитьПропорционально(СуммаДляРаспределения, МассивКоэффициентов);
Если Не ТипЗнч(РезультатРаспределения) = Тип("Массив") или
Не РезультатРаспределения.Количество() = МассивКоэффициентов.Количество() Тогда
Сообщение = новый СообщениеПользователю;
Сообщение.Текст = "По документу не удалось распредилить Сумму Комиссии По УПД.";
Сообщение.Сообщить();
Возврат;
КонецЕсли;
сч=0;
для каждого строкаТовары из Объект.Товары цикл
строкаТовары.Комиссия = строкаТовары.Комиссия+РезультатРаспределения[сч];
сч= сч+1;
КонецЦикла;
Сообщение = новый СообщениеПользователю;
Сообщение.Текст = "Комиссионное вознаграждение на вкладке ""Товары"" пересчитано";
Сообщение.Сообщить();
//LAShadrin 31/03/23 + задача BSLR-1566 аналогично пересчитаем и НДС
МассивКоэффициентов = Объект.Товары.Выгрузить().ВыгрузитьКолонку("СуммаНДСВознаграждения");
СуммаДляРаспределения = (Объект.СуммаКомиссииПоУПД / (100 + ЗначениеОсновнойСтавкиНДС) * ЗначениеОсновнойСтавкиНДС) - СуммаНДСКомиссии; // BSLR-5126
если топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.МодульЧисла(СуммаДляРаспределения) >= топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.МодульЧисла(Объект.СуммаКомиссииПоУПД / (100 + ЗначениеОсновнойСтавкиНДС) * ЗначениеОсновнойСтавкиНДС * 0.1) Тогда // BSLR-5126
Сообщение = новый СообщениеПользователю;
Сообщение.Текст = "Распределение НДС комиссии не может быть выполнено, тк распределяемая разница превышает 10%, обратитесь в техническую поддержку " + ПолучитьАдресПочты(); //LAShadrin 11/03/24 BSLR-3060
Сообщение.Сообщить();
Возврат;
КонецЕсли;
РезультатРаспределения = топ_ОбщийВызовСервера.РаспределитьПропорционально(СуммаДляРаспределения, МассивКоэффициентов);
Если Не ТипЗнч(РезультатРаспределения) = Тип("Массив") или
Не РезультатРаспределения.Количество() = МассивКоэффициентов.Количество() Тогда
Сообщение = новый СообщениеПользователю;
Сообщение.Текст = "По документу не удалось распредилить Сумму Комиссии По УПД.";
Сообщение.Сообщить();
Возврат;
КонецЕсли;
сч=0;
для каждого строкаТовары из Объект.Товары цикл
строкаТовары.СуммаНДСВознаграждения = строкаТовары.СуммаНДСВознаграждения + РезультатРаспределения[сч];
сч= сч+1;
КонецЦикла;
Сообщение = новый СообщениеПользователю;
Сообщение.Текст = "НДС Комиссионного вознаграждения на вкладке ""Товары"" пересчитано";
Сообщение.Сообщить();
//LAShadrin 31/03/23 -
// изменить сумму в таб части для WB_komission
ОТбор = Новый Структура("НаименованиеМП","WB_komission");
НайденыСтроки = Объект.Услуги.НайтиСтроки(ОТбор);
Если НайденыСтроки.Количество() ТОгда
НайденыСтроки[0].Сумма = Объект.СуммаКомиссииПоУПД;
// НДС
Если СтрНайти(НайденыСтроки[0].СтавкаНДС,"10") > 0 Тогда
НайденыСтроки[0].СуммаНДС = НайденыСтроки[0].Сумма * 10 /110;
ИначеЕсли СтрНайти(НайденыСтроки[0].СтавкаНДС,"20") > 0 Тогда
НайденыСтроки[0].СуммаНДС = НайденыСтроки[0].Сумма * 20 /120;
ИначеЕсли СтрНайти(НайденыСтроки[0].СтавкаНДС,"Без НДС") > 0 Тогда
НайденыСтроки[0].СуммаНДС = 0;
// письмерова 11.12.2025 BSLR-5126
ИначеЕсли СтрНайти(НайденыСтроки[0].СтавкаНДС,"22") > 0 Тогда
НайденыСтроки[0].СуммаНДС = НайденыСтроки[0].Сумма * 22 /122;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ИначеЕсли Маркетплейс = Перечисления.топ_ТорговыеПлощадки.OZON ТОгда // письмерова 14.12.2023 BSLR-2953
Разница = Объект.СуммаКомиссииПоУПД - Объект.Товары.Итог("Комиссия");
РазницаНДС = Объект.СуммаКомиссииПоУПД*ЗначениеОсновнойСтавкиНДС/(100 + ЗначениеОсновнойСтавкиНДС) - Объект.Товары.Итог("СуммаНДСВознаграждения"); // BSLR-5126
ВремТабл = Объект.Товары.Выгрузить(,"Комиссия");
ВремТабл.Сортировать("Комиссия Убыв",);
Макс = ВремТабл[0].Комиссия;
Мин = ВремТабл[ВремТабл.Количество()-1].Комиссия;
Если Разница > 0 Тогда
// недобор по комиссии после загрузки, берем строку с мин комиссией и добавляем туда разницу
НайденыСтроки = Объект.Товары.НайтиСтроки(новый Структура("Комиссия",Мин));
Если НайденыСтроки.Количество() Тогда
НайденыСтроки[0].Комиссия = НайденыСтроки[0].Комиссия + Разница;
НайденыСтроки[0].СуммаНДСВознаграждения = НайденыСтроки[0].СуммаНДСВознаграждения + РазницаНДС; // BSLR-4243
КонецЕсли;
КонецЕсли;
Если Разница < 0 Тогда
// перебор по комиссии после загрузки, берем строку с макс комиссией и убавляем оттуда разницу
НайденыСтроки = Объект.Товары.НайтиСтроки(новый Структура("Комиссия",Макс));
Если НайденыСтроки.Количество() Тогда
НайденыСтроки[0].Комиссия = НайденыСтроки[0].Комиссия + Разница;
НайденыСтроки[0].СуммаНДСВознаграждения = НайденыСтроки[0].СуммаНДСВознаграждения + РазницаНДС; // BSLR-4243
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура РаспределитьРазницу(Команда)
РаспределитьРазницуНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура СсылкаНаСтрОтчетаНажатие(Элемент)
ПерейтиПоНавигационнойСсылке(Элемент.Заголовок);
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
УстановитьВидимостьДоступность();
ОбновитьИндексыДокументов(); // BSLR-5372
КонецПроцедуры
&НаКлиенте
Процедура РазрешитьЗагрузкуЗа12МесяцевПриИзменении(Элемент)
УстановитьПериод();
КонецПроцедуры
&НаСервереБезКонтекста
Функция ИспользуютсяХарактеристики(ЛичныйКабинет)
Возврат ЛичныйКабинет.СоздаватьНоменклатуруСИспользованиемХарактеристик;
КонецФункции
&НаКлиенте
Процедура УслугиСтавкаНДСПриИзменении(Элемент)
ТекущиеДанные = Элементы.Услуги.ТекущиеДанные;
ПересчитатьНДС(ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура ПересчитатьНДС(ТекущиеДанные)
НужнаяСумма = ТекущиеДанные.Сумма;
Если НЕ ТекущиеДанные.Свойство("ВыплатыПоМеханикамЛояльностиПартнеров") Тогда // выкупы
Если ТекущиеДанные.Свойство("СуммаКВыплате") Тогда
НужнаяСумма = ТекущиеДанные.СуммаКВыплате;
КонецЕсли;
Иначе // BSLR-4190
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") ТОгда
НужнаяСумма = ТекущиеДанные.СуммаКВыплате;
КонецЕсли;
КонецЕсли;
Если СтрНайти(ТекущиеДанные.СтавкаНДС,"10") > 0 Тогда
ТекущиеДанные.СуммаНДС = НужнаяСумма *10/110;
ИначеЕсли СтрНайти(ТекущиеДанные.СтавкаНДС,"20") > 0 Тогда
ТекущиеДанные.СуммаНДС = НужнаяСумма *20/120;
ИначеЕсли СтрНайти(ТекущиеДанные.СтавкаНДС,"Без НДС") > 0 Тогда
ТекущиеДанные.СуммаНДС = 0;
// письмерова 21.01.2025 BSLR-4261
ИначеЕсли СтрНайти(ТекущиеДанные.СтавкаНДС,"5") > 0 Тогда
ТекущиеДанные.СуммаНДС = НужнаяСумма *5/105;
ИначеЕсли СтрНайти(ТекущиеДанные.СтавкаНДС,"7") > 0 Тогда
ТекущиеДанные.СуммаНДС = НужнаяСумма *7/107;
// письмерова 11.12.2025 BSLR-5126
ИначеЕсли СтрНайти(ТекущиеДанные.СтавкаНДС,"22") > 0 Тогда
ТекущиеДанные.СуммаНДС = НужнаяСумма *22/122;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТоварыПересчитатьПриИзменении(Элемент)
ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
ТекущиеДанные.Сумма = ТекущиеДанные.Цена * ТекущиеДанные.Количество;
ПересчитатьНДС(ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыПересчитатьЦЕНУПриИзменении(Элемент)
ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
ТекущиеДанные.Цена = ?(ТекущиеДанные.Количество = 0 , 0,ТекущиеДанные.Сумма / ТекущиеДанные.Количество);
ПересчитатьНДС(ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыСтавкаНДСПриИзменении(Элемент)
ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
ПересчитатьНДС(ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура ВыкупПересчитатьПриИзменении(Элемент)
ТекущиеДанные = Элементы.Выкуп.ТекущиеДанные;
ТекущиеДанные.Сумма = ТекущиеДанные.Цена * ТекущиеДанные.Количество;
ПересчитатьНДС(ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура ВыкупПересчитатьЦЕНУПриИзменении(Элемент)
ТекущиеДанные = Элементы.Выкуп.ТекущиеДанные;
ТекущиеДанные.Цена = ?(ТекущиеДанные.Количество = 0 , 0,ТекущиеДанные.Сумма / ТекущиеДанные.Количество);
ПересчитатьНДС(ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура ВыкупСтавкаНДСПриИзменении(Элемент)
ТекущиеДанные = Элементы.Выкуп.ТекущиеДанные;
ПересчитатьНДС(ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьВыкупыИзExcel(Команда)
Если НЕ ЗначениеЗаполнено(Период) Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю("Заполните период", , "Период");
Возврат;
КонецЕсли;
Если Объект.Выкуп.Количество() Тогда
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопросОбОчищенииТаблицыВыкупов", ЭтаФорма);
ПоказатьВопрос(ОписаниеОповещения, "Таблица выкупов не пуста. Очистить?", РежимДиалогаВопрос.ДаНетОтмена);
иначе
ВыполнитьЗагрузкуЧерезФайл(Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеОтветаНаВопросОбОчищенииТаблицыВыкупов(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Отмена Тогда
Возврат;
КонецЕсли;
// письмерова 04.03.2024 BSLR-3329
Если Результат = КодВозвратаДиалога.Нет Тогда
Возврат;
КонецЕсли;
Если Результат = КодВозвратаДиалога.Да Тогда
Объект.Выкуп.Очистить();
КонецЕсли;
ВыполнитьЗагрузкуЧерезФайл(Истина);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ГруппироватьТоварыВОтчетеКомиссионераБезУчетаЗаказа(ЛичныйКабинет)
Возврат ЛичныйКабинет.ГруппироватьТоварыВОтчетеКомиссионераБезУчетаЗаказа;
КонецФункции
&НаСервере
Процедура СвернутьНаСервере(ТабЧасть)
Если ТабЧасть = "Товары" Тогда
ВремТабл = Объект.Товары.Выгрузить();
Если Маркетплейс = Перечисления.топ_ТорговыеПлощадки.Wildberries ТОгда // BSLR-5361 ++
// для загрузки ЮЛ нажно оставить Идентификатор - по нему грузим данные юл из другого файла или по апи
// и сворачивать нужно с учетом поля Идентификатор
Для Каждого Стр Из ВремТабл Цикл
Если НЕ Стр.ПродажаЮЛ Тогда
Стр.Идентификатор = "";
КонецЕсли;
КонецЦикла;
ВремТабл.Свернуть("Артикул,Номенклатура,Характеристика,Товар,РазмерWB,ТипОперации,СтавкаНДС,ЭтоНабор,ЕдиницаИзмерения,
|ОбоснованиеДляОплаты,НомерСчФакт,ДатаСчФакт,Покупатель,ПродажаЮЛ,Идентификатор",
"Количество,Сумма,СуммаНДС,Комиссия,СуммаНДСВознаграждения,СуммаДоплатыOzon,ВыплатыПоМеханикамЛояльностиПартнеров,КомиссияБазовая");
Иначе // BSLR-5361
ВремТабл.Свернуть("Артикул,Номенклатура,Характеристика,Товар,РазмерWB,ТипОперации,СтавкаНДС,ЭтоНабор,ЕдиницаИзмерения,
|ОбоснованиеДляОплаты,НомерСчФакт,ДатаСчФакт,Покупатель,ПродажаЮЛ", //письмерова 05.09.2023 BSLR-2487 // BSLR-3879 // BSLR-5361
"Количество,Сумма,СуммаНДС,Комиссия,СуммаНДСВознаграждения,СуммаДоплатыOzon,ВыплатыПоМеханикамЛояльностиПартнеров,КомиссияБазовая");
КонецЕсли; // BSLR-5361 --
ВремТабл.Колонки.Добавить("Цена");
УсреднитьЦеныНаСервереБезКонтекста(ВремТабл, ЗначениеОсновнойСтавкиНДС);
Объект.Товары.Загрузить(ВремТабл);
ИначеЕсли ТабЧасть = "Выкуп" Тогда
ВремТабл = Объект.Выкуп.Выгрузить();
ВремТабл.Свернуть("Артикул,Номенклатура,Характеристика,Товар,РазмерWB,ТипОперации,СтавкаНДС,ЭтоНабор,ЕдиницаИзмерения",
"Количество,Сумма,СуммаНДС,Комиссия,СуммаНДСВознаграждения,СуммаКВыплате");
ВремТабл.Колонки.Добавить("Цена");
УсреднитьЦеныНаСервереБезКонтекста(ВремТабл, ЗначениеОсновнойСтавкиНДС);
Объект.Выкуп.Загрузить(ВремТабл);
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Процедура УсреднитьЦеныНаСервереБезКонтекста(ВремТабл, ЗначениеОсновнойСтавкиНДС)
Для Каждого Стр из ВремТабл Цикл
Стр.Цена = ?(Стр.Количество = 0,0,Стр.Сумма/Стр.Количество);
Стр.СуммаНДСВознаграждения = Окр(Стр.Комиссия * ЗначениеОсновнойСтавкиНДС / (100 + ЗначениеОсновнойСтавкиНДС),2); // BSLR-5126
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
// ++ Бойков BSLR-1852
СписокРеквизитов = Новый Массив;
СписокРеквизитов.Добавить("ЛичныйКабинет");
СписокРеквизитов.Добавить("Товары.Товар");
СписокРеквизитов.Добавить("Услуги.УслугаМП");
СписокРеквизитов.Добавить("Выкуп.Товар");
топ_ИнтерфейсСервер.ПроверитьЗаполнениеРеквизитовПоДоступнымТорговымПлощадкам(ЭтотОбъект, "Объект", СписокРеквизитов, Отказ);
// -- Бойков BSLR-1852
КонецПроцедуры
// письмерова 02.06.2023 BSLR-1990
&НаСервереБезКонтекста
Функция ПолучитьПризнакНабора(Номенклатура)
Возврат ?(Номенклатура.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Набор,Истина, Ложь);
КонецФункции
&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
ТекущиеДанные.ЭтоНабор = ПолучитьПризнакНабора(ТекущиеДанные.Номенклатура)
КонецПроцедуры
&НаКлиенте
Процедура ВыкупНоменклатураПриИзменении(Элемент)
ТекущиеДанные = Элементы.Выкуп.ТекущиеДанные;
ТекущиеДанные.ЭтоНабор = ПолучитьПризнакНабора(ТекущиеДанные.Номенклатура)
КонецПроцедуры
// ++ Бойков BSLR-2012
//
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПроверитьИспользованиеЛичногоКабинета(ЭтотОбъект);
КонецПроцедуры // -- Бойков BSLR-2012
// письмерова 19.04.2023 BSLR-1765
&НаКлиенте
Процедура ПередачаНаКомиссиюВозвратовПоВыкупуУИДНажатие(Элемент, СтандартнаяОбработка)
ПерейтиПоНавигационнойСсылке(Объект.ПередачаНаКомиссиюВозвратовПоВыкупуНавигационнаяСсылка);
КонецПроцедуры
// письмерова 06.09.2023 BSLR-2415
&НаКлиенте
Процедура ТаблицаДокументовДокументУИДОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТекущиеДанные = Элементы.ТаблицаДокументов.ТекущиеДанные;
ПерейтиПоНавигационнойСсылке(ТекущиеДанные.ДокументНавигационнаяСсылка);
КонецПроцедуры
// письмерова 22.12.2023 BSLR-2959
&НаКлиенте
Процедура ТоварыПослеУдаления(Элемент)
ПересчитатьКомиссиюВБ();
КонецПроцедуры
&НаКлиенте
Процедура ТоварыКомиссияПриИзменении(Элемент)
ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
ТекущиеДанные.СуммаНДСВознаграждения = ТекущиеДанные.Комиссия * ЗначениеОсновнойСтавкиНДС /(100 + ЗначениеОсновнойСтавкиНДС); // BSLR-5126
ПересчитатьКомиссиюВБ();
КонецПроцедуры
&НаКлиенте
Процедура ПересчитатьКомиссиюВБ()
// изменить сумму в таб части для WB_komission
ОТбор = Новый Структура("НаименованиеМП","WB_komission");
НайденыСтроки = Объект.Услуги.НайтиСтроки(ОТбор);
Если НайденыСтроки.Количество() ТОгда
НайденыСтроки[0].Сумма = Объект.Товары.Итог("Комиссия");
НайденыСтроки[0].СуммаНДС = Объект.Товары.Итог("СуммаНДСВознаграждения");
КонецЕсли;
КонецПроцедуры
// письмерова 12.08.2024 BSLR-3773
&НаКлиенте
Процедура НомерВходящегоДокументаПриИзменении(Элемент)
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
Если Объект.НомерВходящегоДокумента <> "" Тогда
Элементы.СсылкаНаСтрОтчета.Заголовок = топ_РаботаСМаркетплейсами_Wildberries.ПолучитьАдресСсылкиНаОтчёт(Объект.НомерВходящегоДокумента,Объект.ДатаНачала);
Элементы.СсылкаНаСтрОтчета.Видимость = Истина;
Элементы.ГруппаСсылкаНастрОтчетаПодсказка.Видимость = Истина;
Иначе
Элементы.СсылкаНаСтрОтчета.Заголовок = "";
Элементы.СсылкаНаСтрОтчета.Видимость = Ложь;
Элементы.ГруппаСсылкаНастрОтчетаПодсказка.видимость = Ложь;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// письмерова 21.10.2024 BSLR-3956
Процедура ЗаполнитьИндексыУслуг(Услуги,УслугиОтрицательные)
Запрос = Новый Запрос("ВЫБРАТЬ
| ТЗ.Наименование КАК Наименование,
| ТЗ.НаименованиеМП КАК НаименованиеМП,
| ТЗ.Бренд КАК Бренд,
| ТЗ.Номенклатура КАК Номенклатура,
| ТЗ.Сумма КАК Сумма,
| ТЗ.Цена КАК Цена,
| ТЗ.Количество КАК Количество,
| ТЗ.ДатаЗаказа КАК ДатаЗаказа,
| ТЗ.СуммаНДС КАК СуммаНДС,
| ТЗ.УслугаМП КАК УслугаМП,
| ТЗ.СтавкаНДС КАК СтавкаНДС,
// BSLR-4099
| ТЗ.СтавкаНДССтрокой КАК СтавкаНДССтрокой
|ПОМЕСТИТЬ Таблица
|ИЗ
| &ТЗ КАК ТЗ
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| топ_РаспределениеУслугПоДокументамНастройки.Ссылка.ТорговаяПлощадка КАК ТорговаяПлощадка,
| топ_РаспределениеУслугПоДокументамНастройки.УслугаТП КАК УслугаТП,
| МАКСИМУМ(топ_РаспределениеУслугПоДокументамНастройки.ИндексДокумента) КАК ИндексДокумента
|ПОМЕСТИТЬ ВТ_ИндексыДокументовУслуг
|ИЗ
| Справочник.топ_РаспределениеУслугПоДокументам.Настройки КАК топ_РаспределениеУслугПоДокументамНастройки
|ГДЕ
| НЕ топ_РаспределениеУслугПоДокументамНастройки.Ссылка.ПометкаУдаления
|
|СГРУППИРОВАТЬ ПО
| топ_РаспределениеУслугПоДокументамНастройки.Ссылка.ТорговаяПлощадка,
| топ_РаспределениеУслугПоДокументамНастройки.УслугаТП
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Таблица.Наименование КАК Наименование,
| Таблица.НаименованиеМП КАК НаименованиеМП,
| Таблица.Бренд КАК Бренд,
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Сумма КАК Сумма,
| Таблица.СуммаНДС КАК СуммаНДС,
// BSLR-4099
| Таблица.СтавкаНДССтрокой КАК СтавкаНДССтрокой,
| Таблица.УслугаМП КАК УслугаМП,
| Таблица.СтавкаНДС КАК СтавкаНДС,
| ЕСТЬNULL(ВТ_ИндексыДокументовУслуг.ИндексДокумента, 1) КАК ИндексДокумента,
| Таблица.ДатаЗаказа КАК ДатаЗаказа,
| Таблица.Цена КАК Цена,
| Таблица.Количество КАК Количество
|ИЗ
| Таблица КАК Таблица
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ИндексыДокументовУслуг КАК ВТ_ИндексыДокументовУслуг
| ПО Таблица.УслугаМП = ВТ_ИндексыДокументовУслуг.УслугаТП");
Запрос.УстановитьПараметр("ТЗ",Услуги);
Услуги = Запрос.Выполнить().Выгрузить();
Запрос.УстановитьПараметр("ТЗ",УслугиОтрицательные);
УслугиОтрицательные = Запрос.Выполнить().Выгрузить();
КонецПроцедуры
&НаКлиенте
Процедура ЗаменятьВРеализацииПоВыкупамНаборыНаКомплектыПриИзменении(Элемент)
Элементы.ВыкупСборкаТоваров.Видимость = Объект.ЗаменятьВРеализацииПоВыкупамНаборыНаКомплекты;
КонецПроцедуры
// письмерова 17.01.2025 BSLR-4243
&НаСервере
Процедура ВыровнятьНДСВознаграждения()
РазницаНДС = Объект.Товары.Итог("Комиссия")*ЗначениеОсновнойСтавкиНДС/(100 + ЗначениеОсновнойСтавкиНДС) - Объект.Товары.Итог("СуммаНДСВознаграждения"); // BSLR-5126
Если РазницаНДС <> 0 Тогда
ВремТабл = Объект.Товары.Выгрузить(,"Комиссия");
ВремТабл.Сортировать("Комиссия Убыв",);
Макс = ВремТабл[0].Комиссия;
Мин = ВремТабл[ВремТабл.Количество()-1].Комиссия;
Если РазницаНДС > 0 Тогда
// недобор по комиссии после загрузки, берем строку с мин комиссией и добавляем туда разницу
НайденыСтроки = Объект.Товары.НайтиСтроки(новый Структура("Комиссия",Мин));
Если НайденыСтроки.Количество() Тогда
НайденыСтроки[0].СуммаНДСВознаграждения = НайденыСтроки[0].СуммаНДСВознаграждения + РазницаНДС;
КонецЕсли;
КонецЕсли;
Если РазницаНДС < 0 Тогда
// перебор по комиссии после загрузки, берем строку с макс комиссией и убавляем оттуда разницу
НайденыСтроки = Объект.Товары.НайтиСтроки(новый Структура("Комиссия",Макс));
Если НайденыСтроки.Количество() Тогда
НайденыСтроки[0].СуммаНДСВознаграждения = НайденыСтроки[0].СуммаНДСВознаграждения + РазницаНДС;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// письмерова 21.01.2025 BSLR-4260
&НаСервереБезКонтекста
Функция ПолучитьДействующиеПараметрыНалоговУчетныхПолитикНаДату(
НазваниеРегистра, ЛичныйКабинет, ДатаОкончания, ВыдаватьИсключение)
Возврат топ_УТсервер.ПолучитьДействующиеПараметрыНалоговУчетныхПолитикНаДату(
НазваниеРегистра, ЛичныйКабинет, ДатаОкончания, ВыдаватьИсключение);
КонецФункции
// письмерова 16.04.2025
&НаСервереБезКонтекста
Функция ПолучитьСтавкуНДСПоУмолчанию(ЛК,Дата)
Возврат топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьСтавкуНДСПоУмолчанию(ЛК,Дата);
КонецФункции
// пиьмерова 08.05.2026 BSLR-5340
&НаКлиенте
Процедура ДеревоДокументовДокументУИДОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТекущиеДанные = Элементы.ДеревоДокументов.ТекущиеДанные;
ПерейтиПоНавигационнойСсылке(ТекущиеДанные.ДокументНавигационнаяСсылка);
КонецПроцедуры
#КонецОбласти
#Область ЗагрузкаВыкуповOZON
// письмерова 13.10.2023 BSLR-1587
&НаКлиенте
Процедура ЗагрузитьВыкупыИзExcelOZON(Команда)
Если НЕ ЗначениеЗаполнено(Период) Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю("Заполните период", , "Период");
Возврат;
КонецЕсли;
Если Объект.Выкуп.Количество() Тогда
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопросОбОчищенииВыкупыOZON", ЭтаФорма);
ПоказатьВопрос(ОписаниеОповещения, "Таблица выкупов содержит данные. Очистить?", РежимДиалогаВопрос.ДаНетОтмена);
иначе
ВыполнитьЗагрузкуЧерезФайлВыкупыOZON();
КонецЕсли;
КонецПроцедуры
// письмерова 28.11.2025 BSLR-4287
&НаКлиенте
Процедура ЗагрузитьВыкупыИзExcelOZONВозвраты(Команда)
Если НЕ ЗначениеЗаполнено(Период) Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю("Заполните период", , "Период");
Возврат;
КонецЕсли;
ВыполнитьЗагрузкуЧерезФайлВыкупыOZON(Истина);
КонецПроцедуры
&НаКлиенте
Процедура ПослеОтветаНаВопросОбОчищенииВыкупыOZON(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Отмена Тогда
Возврат;
КонецЕсли;
Если Результат = КодВозвратаДиалога.Да Тогда
Объект.Выкуп.Очистить();
КонецЕсли;
ВыполнитьЗагрузкуЧерезФайлВыкупыOZON();
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьЗагрузкуЧерезФайлВыкупыOZON(ЭтоВозвраты = Ложь) // BSLR-4287
Попытка // BSLR-4287
НачатьПомещениеФайлаНаСервер(Новый ОписаниеОповещения("ВыполнитьЗагрузкуВыкупыOZON",ЭтаФорма,ЭтоВозвраты),,,,,новый УникальныйИдентификатор);
Исключение
ОбщегоНазначенияКлиент.СообщитьПользователю("Не получилось открыть файл. Скорее всего он уже открыт на вашем компьютере");
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьЗагрузкуВыкупыOZON(Результат,ЭтоВозвраты) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
РасширениеФайла = Результат.СсылкаНаФайл.Расширение;
РезультатВыполнения = ЗагрузитьВыкупыOZONИзExcelНаСервере(Результат.Адрес, РасширениеФайла, ЭтоВозвраты); // BSLR-4287
УстановитьВидимостьДоступность();
КонецПроцедуры
&НаСервере
Функция ЗагрузитьВыкупыOZONИзExcelНаСервере(Знач Адрес, Расширение, ЭтоВозвраты)
Результат = Новый Структура("Ошибка, Сообщение, СписокТоваров, СписокУслуг",
Ложь, "", Новый Массив, Новый Массив);
ПерваяСтрока = 0;
ЕстьДанныеОтправления = Ложь;
ТаблицаТоваров = ПолучитьТаблицуЗагрузкиТоваровOZON();
ФайлВременногоХранилища = ПолучитьИзВременногоХранилища(Адрес);
ИмяФайла = ПолучитьИмяВременногоФайла(Расширение);
Если Расширение <> ".xls" И Расширение <> ".xlsx" Тогда
Результат.Ошибка = Истина;
Результат.Сообщение = "Ошибка при загрузке файла, можно загрузить только файл формата Excel";
Сообщить(Результат.Сообщение);
Возврат Результат;
КонецЕсли;
Попытка
ФайлВременногоХранилища.Записать(ИмяФайла);
Исключение
Результат.Ошибка = Истина;
Результат.Сообщение = "Ошибка при загрузке файла, повторите попытку";
Сообщить(Результат.Сообщение);
Возврат Результат;
КонецПопытки;
УдалитьИзВременногоХранилища(Адрес);
MXL = Новый ТабличныйДокумент;
MXL.Прочитать(ИмяФайла);
Файл = Новый Файл(ИмяФайла);
Если Файл.Существует() Тогда
УдалитьФайлы(ИмяФайла);
КонецЕсли;
КоличествоСтрок = MXL.ВысотаТаблицы;
КоличествоКолонок = MXL.ШиринаСтраницы;
// письмерова 01.12.2025 BSLR-4287
Если ЭтоВозвраты ТОгда
СтрокаПоиска_1 = "Отчёт о возвращенных";
СтрокаПоиска_2 = "Возврат товаров за период";
Иначе
СтрокаПоиска_1 = "Отчет о выкупленных";
СтрокаПоиска_2 = "Реализация товаров за период";
КонецЕсли;
Для ТекущаяСтрока = 1 По КоличествоСтрок Цикл
Для ТекущаяКолонка = 1 По КоличествоКолонок Цикл
ТекстЯчейки = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + ТекущаяКолонка).ТекущаяОбласть.Текст);
Если СтрНайти(ТекстЯчейки, СтрокаПоиска_1) <> 0 Тогда // BSLR-4287
ПозицияНомераНачало = СтрНайти(ТекстЯчейки, "№");
НомерОправления = СокрЛП(Сред(ТекстЯчейки, ПозицияНомераНачало + 2));
Объект.НомерВходящегоДокументаВыкупа = НомерОправления;
КонецЕсли;
Если СтрНайти(ТекстЯчейки, СтрокаПоиска_2) <> 0 Тогда // BSLR-4287
ПозицияДаты = СтрНайти(ТекстЯчейки, "по");
ДатаОтправленияСтрока = СокрЛП(Сред(ТекстЯчейки, ПозицияДаты + 3)) + " 00:00:00";
Попытка
ДатаОтправления = Дата(ДатаОтправленияСтрока);
Объект.ДатаВходящегоДокументаВыкупа = ДатаОтправления;
Исключение
ОбщегоНазначения.СообщитьПользователю("Не удалось определить дату входящего документа из файла. Укажите дату вручную");
КонецПопытки;
КонецЕсли;
Если ТекстЯчейки = "№ п/п" Тогда
ПерваяСтрока = ТекущаяСтрока + 3;
КонецЕсли;
Если ТекстЯчейки = "Номер" Тогда
ЕстьДанныеОтправления = Истина;
КонецЕсли;
Если ЕстьДанныеОтправления И ЗначениеЗаполнено(ПерваяСтрока) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Если ПерваяСтрока = 0 Тогда
Результат.Ошибка = Истина;
ОбщегоНазначения.СообщитьПользователю("Выбран не тот документ, скачайте из ЛК на маркетплейсе документ ""Отчет о выкупленных товарах""");
Возврат Результат;
КонецЕсли;
НомераКолонокФайла = СоответствиеКолонокФайлаЗагрузкиВыкупыOZON(MXL, ПерваяСтрока-3, ЭтоВозвраты); // BSLR-4287
Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок-1 Цикл
КоличествоПродано = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.КоличествоПродано).ТекущаяОбласть.Текст);
Если КоличествоПродано = "0" Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = Объект.Выкуп.Добавить();
Если ЭтоВозвраты ТОгда // BSLR-4287 ++
НоваяСтрока.ТипОперации = "Возврат";
Иначе
НоваяСтрока.ТипОперации = "Продажа";
КонецЕсли;
НоваяСтрока.Количество = ?(ЭтоВозвраты, - КоличествоПродано,КоличествоПродано); // BSLR-4287 --
ЗаполнитьСтрокуТаблицыТоваровВыкупыOZON(НоваяСтрока, MXL, ТекущаяСтрока, НомераКолонокФайла);
КонецЦикла;
ДополнитьДаннымиТоваровИНоменклатурыOZON();
Возврат Результат;
КонецФункции
&НаСерверебезконтекста
Функция СоответствиеКолонокФайлаЗагрузкиВыкупыOZON(MXL, СтрокаЗаголовков, ЭтоВозвраты = Ложь)
Результат = Новый Структура;
Если Не ЭтоВозвраты ТОгда // BSLR-4287 ++
Результат.Вставить("Артикул", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Код товара продавца"));
Если НЕ ЗначениеЗаполнено(Результат.Артикул) Тогда // BSLR-5196 ++
Результат.Вставить("Артикул", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Артикул"));
КонецЕсли; // BSLR-5196 --
Результат.Вставить("СуммаПродажи", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Итого к начислению, руб."));
Результат.Вставить("Идентификатор", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Код товара OZON"));
Иначе
Результат.Вставить("Артикул", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Артикул"));
Результат.Вставить("СуммаПродажи", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Возвращено на сумму, руб."));
Результат.Вставить("Идентификатор", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "SKU"));
КонецЕсли; // BSLR-4287 --
Результат.Вставить("КоличествоПродано", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Кол-во"));
Результат.Вставить("СтавкаНДС", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Ставка НДС, %"));
Результат.Вставить("ЦенаПродажи", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Цена реализации"));
Возврат Результат;
КонецФункции
&НаСервере
Процедура ЗаполнитьСтрокуТаблицыТоваровВыкупыOZON(СтрокаПриемник, ТабличныйДокумент, ТекущаяСтрока, НомераКолонокФайла, ЭтоВозврат = Ложь)
XMLТекущаяСтрока = XMLСтрока(ТекущаяСтрока);
СтрокаПриемник.Артикул = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Артикул).ТекущаяОбласть.Текст);
СтрокаПриемник.Цена = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ЦенаПродажи).ТекущаяОбласть.Текст);
СтрокаПриемник.СуммаКВыплате = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СуммаПродажи).ТекущаяОбласть.Текст);
СтрокаПриемник.Сумма = СтрокаПриемник.Количество * СтрокаПриемник.Цена;
СтрокаПриемник.СтавкаНДС = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СтавкаНДС).ТекущаяОбласть.Текст);
// письмерова 10.03.2026 BSLR-5362
Если СтрНайти(СтрокаПриемник.СтавкаНДС,"%") = 0 ТОгда
СтрокаПриемник.СтавкаНДС = СтрЗаменить(СтрокаПриемник.СтавкаНДС,",00", "%");
КонецЕсли;
// sku
ИД = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Идентификатор).ТекущаяОбласть.Текст);
// формализация данных под требования хранения данных в системе, письмерова 1 135 800 695 или 788 867 123
// 10 или 9 символов
Если СтрДлина(ИД) = 9 Тогда
Гр1 = Лев(ИД,3);
Гр2 = Сред(ИД,4,3);
ГР3 = Прав(ИД,3);
ИДСтрокой = Гр1 + Символы.НПП + Гр2 + Символы.НПП + Гр3;
ИначеЕсли СтрДлина(ИД) = 10 Тогда
Гр0 = Лев(ИД,1);
Гр1 = Сред(ИД,2,3);
Гр2 = Сред(ИД,5,3);
ГР3 = Прав(ИД,3);
ИДСтрокой = Гр0 + Символы.НПП + Гр1 + Символы.НПП + Гр2 + Символы.НПП + Гр3;
Иначе
ИДСтрокой = ИД;
КонецЕсли;
СтрокаПриемник.Идентификатор = ИДСтрокой;
КонецПроцедуры
&НаСервере
Процедура ДополнитьДаннымиТоваровИНоменклатурыOZON()
// дополнить данными товаров и связанной номенкалтуры
ВремТабл = Объект.Выкуп.Выгрузить();
Запрос = Новый Запрос("ВЫБРАТЬ
| ТЗ.Идентификатор КАК Идентификатор,
| ТЗ.Артикул КАК Артикул,
| ТЗ.ТипОперации КАК ТипОперации,
| ТЗ.Количество КАК Количество,
| ТЗ.Сумма КАК Сумма,
| ТЗ.СуммаКВыплате КАК СуммаКВыплате,
| ТЗ.Цена КАК Цена,
| ТЗ.СтавкаНДС КАК СтавкаНДС
|ПОМЕСТИТЬ ВТ_Таблица
|ИЗ
| &ТЗ КАК ТЗ
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_Таблица.Идентификатор КАК Идентификатор,
| ВТ_Таблица.Артикул КАК Артикул,
| ВТ_Таблица.ТипОперации КАК ТипОперации,
| ВТ_Таблица.Количество КАК Количество,
| ВТ_Таблица.Сумма КАК Сумма,
| ВТ_Таблица.СуммаКВыплате КАК СуммаКВыплате,
| ВТ_Таблица.Цена КАК Цена,
| ВТ_Таблица.СтавкаНДС КАК СтавкаНДС,
| топ_ТоварыТорговыхПлощадок.Ссылка КАК Товар
|ПОМЕСТИТЬ ВТ_ТоварыПредварительно
|ИЗ
| ВТ_Таблица КАК ВТ_Таблица
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.топ_ТоварыТорговыхПлощадок КАК топ_ТоварыТорговыхПлощадок
| ПО (ВТ_Таблица.Идентификатор = топ_ТоварыТорговыхПлощадок.sku_fbo
| ИЛИ ВТ_Таблица.Идентификатор = топ_ТоварыТорговыхПлощадок.sku_fbs)
| И (топ_ТоварыТорговыхПлощадок.ЛичныйКабинет = &ЛичныйКабинет)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_ТоварыПредварительно.Идентификатор КАК Идентификатор,
| ВТ_ТоварыПредварительно.Артикул КАК Артикул,
| ВТ_ТоварыПредварительно.ТипОперации КАК ТипОперации,
| ВТ_ТоварыПредварительно.Количество КАК Количество,
| ВТ_ТоварыПредварительно.Сумма КАК Сумма,
| ВТ_ТоварыПредварительно.СуммаКВыплате КАК СуммаКВыплате,
| ВТ_ТоварыПредварительно.Цена КАК Цена,
| ВТ_ТоварыПредварительно.СтавкаНДС КАК СтавкаНДС,
| ВЫБОР
| КОГДА ВТ_ТоварыПредварительно.Товар ЕСТЬ NULL
| ТОГДА топ_ТоварыТорговыхПлощадок.Ссылка
| ИНАЧЕ ВТ_ТоварыПредварительно.Товар
| КОНЕЦ КАК Товар
|ПОМЕСТИТЬ ВТ_ТоварыПолная
|ИЗ
| ВТ_ТоварыПредварительно КАК ВТ_ТоварыПредварительно
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.топ_ТоварыТорговыхПлощадок КАК топ_ТоварыТорговыхПлощадок
| ПО ВТ_ТоварыПредварительно.Артикул = топ_ТоварыТорговыхПлощадок.КодПоставщика
| И (топ_ТоварыТорговыхПлощадок.ЛичныйКабинет = &ЛичныйКабинет)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| МАКСИМУМ(ВТ_ТоварыПолная.Товар) КАК Товар,
| ВТ_ТоварыПолная.Идентификатор КАК Идентификатор,
| ВТ_ТоварыПолная.Артикул КАК Артикул,
| СУММА(ВТ_ТоварыПолная.Количество) КАК Количество,
| СУММА(ВТ_ТоварыПолная.Сумма) КАК Сумма,
| ВТ_ТоварыПолная.Цена КАК Цена,
| ВЫБОР
| КОГДА ВТ_ТоварыПолная.СтавкаНДС = ""10,00""
| ТОГДА ""10%""
| КОГДА ВТ_ТоварыПолная.СтавкаНДС = ""20,00""
| ТОГДА ""20%""
// письмерова 21.01.2025 BSLR-4260
| КОГДА ВТ_ТоварыПолная.СтавкаНДС = ""5,00""
| ТОГДА ""5%""
| КОГДА ВТ_ТоварыПолная.СтавкаНДС = ""7,00""
| ТОГДА ""7%""
| ИНАЧЕ ВТ_ТоварыПолная.СтавкаНДС
| КОНЕЦ КАК СтавкаНДС,
| топ_СоответствиеТоваров.Номенклатура КАК Номенклатура,
| топ_СоответствиеТоваров.Характеристика КАК Характеристика,
| ВЫБОР
| КОГДА топ_СоответствиеТоваров.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяССылка)
| ТОГДА топ_СоответствиеТоваров.Номенклатура.ЕдиницаИзмерения
| ИНАЧЕ топ_СоответствиеТоваров.Упаковка
| КОНЕЦ КАК ЕдиницаИзмерения,
// письмерова 18.11.2024 BSLR-4106
| ВЫБОР
| КОГДА топ_СоответствиеТоваров.Номенклатура ЕСТЬ NULL
| ТОГДА ЛОЖЬ
| ИНАЧЕ ВЫБОР
| КОГДА топ_СоответствиеТоваров.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
| КОНЕЦ КАК ЭтоНабор,
| СУММА(ВТ_ТоварыПолная.СуммаКВыплате) КАК СуммаКВыплате,
| ВТ_ТоварыПолная.ТипОперации КАК ТипОперации,
| СУММА(ВЫБОР
| КОГДА ВТ_ТоварыПолная.СтавкаНДС = ""10,00""
| ИЛИ ВТ_ТоварыПолная.СтавкаНДС = ""10%""
| ТОГДА ВТ_ТоварыПолная.СуммаКВыплате * 10 / 110
| КОГДА ВТ_ТоварыПолная.СтавкаНДС = ""20,00""
| ИЛИ ВТ_ТоварыПолная.СтавкаНДС = ""20%""
| ТОГДА ВТ_ТоварыПолная.СуммаКВыплате * 20 / 120
// письмерова 21.01.2025 BSLR-4260
| КОГДА ВТ_ТоварыПолная.СтавкаНДС = ""5,00""
| ИЛИ ВТ_ТоварыПолная.СтавкаНДС = ""5%""
| ТОГДА ВТ_ТоварыПолная.СуммаКВыплате * 5 / 105
| КОГДА ВТ_ТоварыПолная.СтавкаНДС = ""7,00""
| ИЛИ ВТ_ТоварыПолная.СтавкаНДС = ""7%""
| ТОГДА ВТ_ТоварыПолная.СуммаКВыплате * 7 / 107
// письмерова 11.12.2025 BSLR-5126
| КОГДА ВТ_ТоварыПолная.СтавкаНДС = ""22,00""
| ИЛИ ВТ_ТоварыПолная.СтавкаНДС = ""22%""
| ТОГДА ВТ_ТоварыПолная.СуммаКВыплате * 22 / 122
| ИНАЧЕ 0
| КОНЕЦ) КАК СуммаНДС
|ИЗ
| ВТ_ТоварыПолная КАК ВТ_ТоварыПолная
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.топ_СоответствиеТоваров КАК топ_СоответствиеТоваров
| ПО ВТ_ТоварыПолная.Товар = топ_СоответствиеТоваров.Товар
|
|СГРУППИРОВАТЬ ПО
| ВТ_ТоварыПолная.ТипОперации,
| ВТ_ТоварыПолная.Идентификатор,
| ВЫБОР
| КОГДА ВТ_ТоварыПолная.СтавкаНДС = ""10,00""
| ТОГДА ""10%""
| КОГДА ВТ_ТоварыПолная.СтавкаНДС = ""20,00""
| ТОГДА ""20%""
// письмерова 21.01.2025 BSLR-4260
| КОГДА ВТ_ТоварыПолная.СтавкаНДС = ""5,00""
| ТОГДА ""5%""
| КОГДА ВТ_ТоварыПолная.СтавкаНДС = ""7,00""
| ТОГДА ""7%""
| ИНАЧЕ ВТ_ТоварыПолная.СтавкаНДС
| КОНЕЦ,
| топ_СоответствиеТоваров.Номенклатура,
| топ_СоответствиеТоваров.Характеристика,
// письмерова 18.11.2024 BSLR-4106
| ВЫБОР
| КОГДА топ_СоответствиеТоваров.Номенклатура ЕСТЬ NULL
| ТОГДА ЛОЖЬ
| ИНАЧЕ ВЫБОР
| КОГДА топ_СоответствиеТоваров.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
| КОНЕЦ,
| топ_СоответствиеТоваров.Упаковка,
| ВТ_ТоварыПолная.Артикул,
| ВТ_ТоварыПолная.Цена,
| ВЫБОР
| КОГДА топ_СоответствиеТоваров.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяССылка)
| ТОГДА топ_СоответствиеТоваров.Номенклатура.ЕдиницаИзмерения
| ИНАЧЕ топ_СоответствиеТоваров.Упаковка
| КОНЕЦ");
Запрос.УстановитьПараметр("ЛичныйКабинет",Объект.ЛичныйКабинет);
Запрос.УстановитьПараметр("ТЗ",ВремТабл);
ТаблицаИтоговая = Запрос.Выполнить().Выгрузить();
Объект.Выкуп.Очистить();
Объект.Выкуп.Загрузить(ТаблицаИтоговая);
КонецПроцедуры
#КонецОбласти
&НаСервереБезКонтекста
Функция ПолучитьАдресПочты()
Возврат Константы.топ_АдресПочтыТехподдержки.Получить();
КонецФункции
// письмерова 19.04.2024 BSLR-3481
&НаСервере
Функция РазмерWBПриИзмененииНаСервере(Данные)
ДанныеНоменклатуры = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьДанныеСвязаннойНомеклатурыПоТовару(Данные);
Возврат ДанныеНоменклатуры;
КонецФункции
&НаКлиенте
Процедура ТоварыРазмерWBПриИзменении(Элемент)
ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
Данные = Новый Структура("Товар, Размер",ТекущиеДанные.Товар,ТекущиеДанные.РазмерWB);
ДанныеНоменклатуры = РазмерWBПриИзмененииНаСервере(Данные);
ТекущиеДанные.Номенклатура = ДанныеНоменклатуры.Номенклатура;
ТекущиеДанные.Характеристика = ДанныеНоменклатуры.Характеристика;
КонецПроцедуры
&НаКлиенте
Процедура ВыкупРазмерWBПриИзменении(Элемент)
ТекущиеДанные = Элементы.Выкуп.ТекущиеДанные;
Данные = Новый Структура("Товар, Размер",ТекущиеДанные.Товар,ТекущиеДанные.РазмерWB);
ДанныеНоменклатуры = РазмерWBПриИзмененииНаСервере(Данные);
ТекущиеДанные.Номенклатура = ДанныеНоменклатуры.Номенклатура;
ТекущиеДанные.Характеристика = ДанныеНоменклатуры.Характеристика;
КонецПроцедуры
// письмерова 30.08.2024 BSLR-3601
&НаКлиенте
Процедура ТолькоВыкупыПриИзменении(Элемент)
Объект.ДатаНачала = дата('0001.01.01 00:00:00');
Объект.ДатаОкончания = дата('0001.01.01 00:00:00');
УстановитьПериод();
УстановитьВидимостьДоступность();
КонецПроцедуры
// письмерова 22.10.2024 BSLR-4033
&НаКлиенте
Процедура ИзменитьСтавкуНДС(Команда)
СписокСтавок = Новый СписокЗначений;
СписокСтавок.Добавить("22%"); // SLR-5126
СписокСтавок.Добавить("20%");
СписокСтавок.Добавить("10%");
СписокСтавок.Добавить("Без НДС");
// письмерова 21.01.2025 BSLR-4261
СписокСтавок.Добавить("5%");
СписокСтавок.Добавить("7%");
ЭтоТовары = ?(ЭтаФорма.ТекущийЭлемент.Родитель.Имя = "ГруппаКомандыВыкуп",Ложь,Истина);
СписокСтавок.ПоказатьВыборЭлемента(новый ОписаниеОповещения("ПослеВЫбораСтавкиНДС",ЭтотОбъект,ЭтоТовары),"Выберите ставку НДС",СписокСтавок[0]);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВЫбораСтавкиНДС(ВыбранныйЭлемент,ЭтоТовары) Экспорт
Если ВыбранныйЭлемент = Неопределено Тогда
Сообщить("Ставка НДС не выбрана");
Иначе
Если ЭтоТовары Тогда
Для Каждого Эл Из Элементы.Товары.ВыделенныеСтроки Цикл
Объект.Товары.НайтиПоИдентификатору(Эл).СтавкаНДС = ВыбранныйЭлемент;
ТекущиеДанные = Объект.Товары.НайтиПоИдентификатору(Эл);
ПересчитатьНДС(ТекущиеДанные);
// письмерова 16.01.2025 BSLR-4243
// если ндс комиссии не посчитан - пересчитаем по 20%
Если ТекущиеДанные.СуммаНДСВознаграждения = 0 Тогда
ТекущиеДанные.СуммаНДСВознаграждения = Окр(ТекущиеДанные.Комиссия * ЗначениеОсновнойСтавкиНДС/(100 + ЗначениеОсновнойСтавкиНДС),2); // BSLR-5126
КонецЕсли;
КонецЦикла;
Иначе
Для Каждого Эл Из Элементы.Выкуп.ВыделенныеСтроки Цикл
Объект.Выкуп.НайтиПоИдентификатору(Эл).СтавкаНДС = ВыбранныйЭлемент;
ПересчитатьНДС(Объект.Выкуп.НайтиПоИдентификатору(Эл));
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// письмерова 06.03.2026 BSLR-5361
&НаКлиенте
Процедура ПоказатьТолькоЮЛПриИзменении(Элемент)
Если ПоказатьТолькоЮЛ ТОгда
Элементы.Товары.ОтборСтрок = Новый ФиксированнаяСтруктура("ПродажаЮЛ", Истина);
Иначе
Элементы.Товары.ОтборСтрок = Новый ФиксированнаяСтруктура();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТаблицаДокументовПриАктивизацииСтроки(Элемент)
ОбновитьИндексыДокументов();
КонецПроцедуры
// письмерова 23.10.2024 BSLR-3318
#Область ЗагрузкаКомпенсации
&НаКлиенте
Процедура ЗагрузитьКомпенсацииИзExcel(Команда)
//Если НЕ ЗначениеЗаполнено(Период) Тогда
// ОбщегоНазначенияКлиент.СообщитьПользователю("Заполните период", , "Период");
// Возврат;
//КонецЕсли;
Если Объект.Компенсации.Количество() Тогда
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопросОбОчищенииКомпенсации", ЭтаФорма);
ПоказатьВопрос(ОписаниеОповещения, "Таблица компенсаций содержит данные. Очистить?", РежимДиалогаВопрос.ДаНетОтмена);
иначе
ВыполнитьЗагрузкуЧерезФайлКомпенсации();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеОтветаНаВопросОбОчищенииКомпенсации(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Отмена Тогда
Возврат;
КонецЕсли;
Если Результат = КодВозвратаДиалога.Да Тогда
Объект.Компенсации.Очистить();
КонецЕсли;
ВыполнитьЗагрузкуЧерезФайлКомпенсации();
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьЗагрузкуЧерезФайлКомпенсации(ЭтоДекомпенсация = Ложь) // BSLR-4515
Попытка
НачатьПомещениеФайлаНаСервер(Новый ОписаниеОповещения("ВыполнитьЗагрузкуКомпенсации",ЭтаФорма,ЭтоДекомпенсация),,,,,новый УникальныйИдентификатор); // BSLR-4515
Исключение
ОбщегоНазначенияКлиент.СообщитьПользователю("Не получилось открыть файл. Скорее всего он уже открыт на вашем компьютере");
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьЗагрузкуКомпенсации(Результат,ЭтоДекомпенсация) Экспорт // BSLR-4515
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
РасширениеФайла = Результат.СсылкаНаФайл.Расширение;
Результат = ЗагрузитьКомпенсацииИзExcelНаСервере(Результат.Адрес, РасширениеФайла, ЭтоДекомпенсация); // BSLR-4515
Если НЕ Результат.Ошибка Тогда
ЭтаФорма.Модифицированность = Истина;
УстановитьВидимостьДоступность(); // BSLR-5071
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ЗагрузитьКомпенсацииИзExcelНаСервере(Знач Адрес, Расширение, ЭтоДекомпенсация) // BSLR-4515
Результат = Новый Структура("Ошибка, Сообщение", Ложь, "");
ПерваяСтрока = 0;
ЕстьДанныеОтправления = Ложь;
ТаблицаТоваров = ПолучитьТаблицуЗагрузкиКомпенсации();
// письмерова 10.10.2025 BSLR-4515
//Если НЕ ЭтоДекомпенсация ТОгда
// Объект.Компенсации.Очистить();
//КонецЕсли;
ФайлВременногоХранилища = ПолучитьИзВременногоХранилища(Адрес);
ИмяФайла = ПолучитьИмяВременногоФайла(Расширение);
Если Расширение <> ".xls" И Расширение <> ".xlsx" Тогда
Результат.Ошибка = Истина;
Результат.Сообщение = "Ошибка при загрузке файла, можно загрузить только файл формата Excel";
Сообщить(Результат.Сообщение);
Возврат Результат;
КонецЕсли;
Попытка
ФайлВременногоХранилища.Записать(ИмяФайла);
Исключение
Результат.Ошибка = Истина;
Результат.Сообщение = "Ошибка при загрузке файла, повторите попытку";
Сообщить(Результат.Сообщение);
Возврат Результат;
КонецПопытки;
УдалитьИзВременногоХранилища(Адрес);
MXL = Новый ТабличныйДокумент;
MXL.Прочитать(ИмяФайла);
Файл = Новый Файл(ИмяФайла);
Если Файл.Существует() Тогда
УдалитьФайлы(ИмяФайла);
КонецЕсли;
КоличествоСтрок = MXL.ВысотаТаблицы;
КоличествоКолонок = MXL.ШиринаСтраницы;
Для ТекущаяСтрока = 1 По КоличествоСтрок Цикл
Для ТекущаяКолонка = 1 По КоличествоКолонок Цикл
ТекстЯчейки = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + ТекущаяКолонка).ТекущаяОбласть.Текст);
Если ТекстЯчейки = "№ п/п" Тогда
ПерваяСтрока = ТекущаяСтрока + 2;
КонецЕсли;
Если ЗначениеЗаполнено(ПерваяСтрока) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(ПерваяСтрока) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если ПерваяСтрока = 0 Тогда
Результат.Ошибка = Истина;
ОбщегоНазначения.СообщитьПользователю("Выбран не тот документ, скачайте из ЛК на маркетплейсе документ ""Отчет о компенсациях """);
Возврат Результат;
КонецЕсли;
НомераКолонокФайла = СоответствиеКолонокФайлаЗагрузкиКомпенсации(MXL, ПерваяСтрока-2);
ПустаяСтрока = 0;
Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок-1 Цикл
Если ПустаяСтрока > 3 Тогда
Прервать; // таблица закончена, остались только подписи
КонецЕсли;
Если Не ЗначениеЗаполнено(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C2").ТекущаяОбласть.Текст)) ТОгда
ПустаяСтрока = ПустаяСтрока + 1; // колонка № п/п
ПРодолжить;
КонецЕсли;
Если СтрНайти(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C2").ТекущаяОбласть.Текст),"Всего к начислению")>0 Тогда
ПустаяСтрока = ПустаяСтрока + 1; // итоги по таблице
ПРодолжить;
КонецЕсли;
// письмерова 10.10.2025 BSLR-4515
Если СтрНайти(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C2").ТекущаяОбласть.Текст),"Всего к удержанию")>0 Тогда
ПустаяСтрока = ПустаяСтрока + 1; // итоги по таблице
ПРодолжить;
КонецЕсли;
НоваяСтрока = ТаблицаТоваров.Добавить();
ЗаполнитьСтрокуТаблицыТоваровКомпенсации(НоваяСтрока, MXL, ТекущаяСтрока, НомераКолонокФайла);
// письмерова 10.10.2025 BSLR-4515
Если ЭтоДекомпенсация ТОгда
НоваяСтрока.ТипКомпенсации = "Декомпенсация";
НоваяСтрока.Количество = - НоваяСтрока.Количество;
НоваяСтрока.СтоимостьВсего = - НоваяСтрока.СтоимостьВсего;
НоваяСтрока.УменьшеноНаСумму = - НоваяСтрока.УменьшеноНаСумму;
НоваяСтрока.ИтогоКНачислению = - НоваяСтрока.ИтогоКНачислению;
КонецЕсли;
КонецЦикла;
ДополнитьДаннымиТоваровИНоменклатурыКомпенсации(ТаблицаТоваров);
Возврат Результат;
КонецФункции
&НаСервереБезКонтекста
Функция СоответствиеКолонокФайлаЗагрузкиКомпенсации(MXL, СтрокаЗаголовков)
Результат = Новый Структура;
Результат.Вставить("Артикул", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Артикул"));
Результат.Вставить("ТипКомпенсации", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Тип компенсации"));
Результат.Вставить("SKU", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "SKU"));
Результат.Вставить("Количество", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Кол-во"));
Результат.Вставить("ШтрихКод", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Штрих-код"));
Результат.Вставить("СтоимостьТовара", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков+1, "Действительная стоимость товара"));
Результат.Вставить("СтоимостьВсего", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков+1, "Действительная стоимость - всего"));
Результат.Вставить("УменьшеноНаСумму", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков+1, "Уменьшено на сумму"));
Результат.Вставить("ИтогоКНачислению", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Итого к начислению"));
// письмерова 10.10.2025 BSLR-4515, декомпенсация
Если Результат.ИтогоКНачислению = 0 Тогда
Результат.Вставить("ИтогоКНачислению", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Итого сумма излишне выплаченных компенсаций к удержанию"));
КонецЕсли;
Если Результат.ТипКомпенсации = 0 Тогда
Результат.Вставить("ТипКомпенсации", 99);
КонецЕсли;
Если Результат.УменьшеноНаСумму = 0 Тогда
Результат.Вставить("УменьшеноНаСумму", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Скорректировано на сумму"));
КонецЕсли;
// письмерова 29.12.2025 BSLR-5207
Если Результат.СтоимостьТовара = 0 Тогда
Результат.Вставить("СтоимостьТовара", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Объявленная стоимость товара"));
КонецЕсли;
Если Результат.СтоимостьВсего = 0 Тогда
Результат.Вставить("СтоимостьВсего", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Объявленная стоимость всего"));
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСервере
Процедура ЗаполнитьСтрокуТаблицыТоваровКомпенсации(СтрокаПриемник, ТабличныйДокумент, ТекущаяСтрока, НомераКолонокФайла, ЭтоВозврат = Ложь)
XMLТекущаяСтрока = XMLСтрока(ТекущаяСтрока);
СтрокаПриемник.Артикул = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Артикул).ТекущаяОбласть.Текст);
СтрокаПриемник.ТипКомпенсации = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ТипКомпенсации).ТекущаяОбласть.Текст);
СтрокаПриемник.Количество = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Количество).ТекущаяОбласть.Текст);
СтрокаПриемник.ШтрихКод = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ШтрихКод).ТекущаяОбласть.Текст);
СтрокаПриемник.СтоимостьТовара = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СтоимостьТовара).ТекущаяОбласть.Текст);
СтрокаПриемник.СтоимостьВсего = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СтоимостьВсего).ТекущаяОбласть.Текст);
СтрокаПриемник.УменьшеноНаСумму = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.УменьшеноНаСумму).ТекущаяОбласть.Текст);
СтрокаПриемник.ИтогоКНачислению = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ИтогоКНачислению).ТекущаяОбласть.Текст);
// sku
ИД = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.SKU).ТекущаяОбласть.Текст);
// формализация данных под требования хранения данных в системе, письмерова 1 135 800 695 или 788 867 123
// 10 или 9 символов
Если СтрДлина(ИД) = 9 Тогда
Гр1 = Лев(ИД,3);
Гр2 = Сред(ИД,4,3);
ГР3 = Прав(ИД,3);
ИДСтрокой = Гр1 + Символы.НПП + Гр2 + Символы.НПП + Гр3;
ИначеЕсли СтрДлина(ИД) = 10 Тогда
Гр0 = Лев(ИД,1);
Гр1 = Сред(ИД,2,3);
Гр2 = Сред(ИД,5,3);
ГР3 = Прав(ИД,3);
ИДСтрокой = Гр0 + Символы.НПП + Гр1 + Символы.НПП + Гр2 + Символы.НПП + Гр3;
Иначе
ИДСтрокой = ИД;
КонецЕсли;
СтрокаПриемник.SKU = ИДСтрокой;
КонецПроцедуры
&НаСервере
Процедура ДополнитьДаннымиТоваровИНоменклатурыКомпенсации(ТаблицаТоваров)
Запрос = Новый Запрос("ВЫБРАТЬ
| ТЗ.SKU КАК SKU,
| ТЗ.Артикул КАК Артикул,
| ТЗ.ТипКомпенсации КАК ТипКомпенсации,
| ТЗ.Количество КАК Количество,
| ТЗ.ШтрихКод КАК ШтрихКод,
| ТЗ.СтоимостьТовара КАК СтоимостьТовара,
| ТЗ.СтоимостьВсего КАК СтоимостьВсего,
| ТЗ.УменьшеноНаСумму КАК УменьшеноНаСумму,
| ТЗ.ИтогоКНачислению КАК ИтогоКНачислению
|ПОМЕСТИТЬ ВТ_Таблица
|ИЗ
| &ТЗ КАК ТЗ
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_Таблица.SKU КАК SKU,
| ВТ_Таблица.Артикул КАК Артикул,
| ВТ_Таблица.ТипКомпенсации КАК ТипКомпенсации,
| ВТ_Таблица.Количество КАК Количество,
| ВТ_Таблица.ШтрихКод КАК ШтрихКод,
| ВТ_Таблица.СтоимостьТовара КАК СтоимостьТовара,
| ВТ_Таблица.СтоимостьВсего КАК СтоимостьВсего,
| ВТ_Таблица.УменьшеноНаСумму КАК УменьшеноНаСумму,
| ВТ_Таблица.ИтогоКНачислению КАК ИтогоКНачислению,
| топ_ТоварыТорговыхПлощадок.Ссылка КАК Товар
|ПОМЕСТИТЬ ВТ_ТоварыПредварительно
|ИЗ
| ВТ_Таблица КАК ВТ_Таблица
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.топ_ТоварыТорговыхПлощадок КАК топ_ТоварыТорговыхПлощадок
| ПО (ВТ_Таблица.SKU = топ_ТоварыТорговыхПлощадок.sku_fbo
| ИЛИ ВТ_Таблица.SKU = топ_ТоварыТорговыхПлощадок.sku_fbs)
| И (топ_ТоварыТорговыхПлощадок.ЛичныйКабинет = &ЛичныйКабинет)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_ТоварыПредварительно.SKU КАК SKU,
| ВТ_ТоварыПредварительно.Артикул КАК Артикул,
| ВТ_ТоварыПредварительно.ТипКомпенсации КАК ТипКомпенсации,
| ВТ_ТоварыПредварительно.Количество КАК Количество,
| ВТ_ТоварыПредварительно.ШтрихКод КАК ШтрихКод,
| ВТ_ТоварыПредварительно.СтоимостьТовара КАК СтоимостьТовара,
| ВТ_ТоварыПредварительно.СтоимостьВсего КАК СтоимостьВсего,
| ВТ_ТоварыПредварительно.УменьшеноНаСумму КАК УменьшеноНаСумму,
| ВТ_ТоварыПредварительно.ИтогоКНачислению КАК ИтогоКНачислению,
| ВЫБОР
| КОГДА ВТ_ТоварыПредварительно.Товар ЕСТЬ NULL
| ТОГДА топ_ТоварыТорговыхПлощадок.Ссылка
| ИНАЧЕ ВТ_ТоварыПредварительно.Товар
| КОНЕЦ КАК Товар
|ПОМЕСТИТЬ ВТ_ТоварыПолная
|ИЗ
| ВТ_ТоварыПредварительно КАК ВТ_ТоварыПредварительно
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.топ_ТоварыТорговыхПлощадок КАК топ_ТоварыТорговыхПлощадок
| ПО ВТ_ТоварыПредварительно.Артикул = топ_ТоварыТорговыхПлощадок.КодПоставщика
| И (топ_ТоварыТорговыхПлощадок.ЛичныйКабинет = &ЛичныйКабинет)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| МАКСИМУМ(ВТ_ТоварыПолная.Товар) КАК Товар,
| ВТ_ТоварыПолная.SKU КАК SKU,
| ВТ_ТоварыПолная.Артикул КАК Артикул,
| ВТ_ТоварыПолная.ТипКомпенсации КАК ТипКомпенсации,
| СУММА(ВТ_ТоварыПолная.Количество) КАК Количество,
| ВТ_ТоварыПолная.ШтрихКод КАК ШтрихКод,
| СУММА(ВТ_ТоварыПолная.СтоимостьТовара) КАК СтоимостьТовара,
| СУММА(ВТ_ТоварыПолная.СтоимостьВсего) КАК СтоимостьВсего,
| СУММА(ВТ_ТоварыПолная.УменьшеноНаСумму) КАК УменьшеноНаСумму,
| СУММА(ВТ_ТоварыПолная.ИтогоКНачислению) КАК ИтогоКНачислению,
| топ_СоответствиеТоваров.Номенклатура КАК Номенклатура,
| топ_СоответствиеТоваров.Характеристика КАК Характеристика,
| ВЫБОР
| КОГДА топ_СоответствиеТоваров.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ЭтоНабор,
| ВЫБОР
| КОГДА топ_СоответствиеТоваров.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяССылка)
| ТОГДА топ_СоответствиеТоваров.Номенклатура.ЕдиницаИзмерения
| ИНАЧЕ топ_СоответствиеТоваров.Упаковка
| КОНЕЦ КАК ЕдиницаИзмерения
|ИЗ
| ВТ_ТоварыПолная КАК ВТ_ТоварыПолная
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.топ_СоответствиеТоваров КАК топ_СоответствиеТоваров
| ПО ВТ_ТоварыПолная.Товар = топ_СоответствиеТоваров.Товар
|
|СГРУППИРОВАТЬ ПО
| ВТ_ТоварыПолная.SKU,
| ВТ_ТоварыПолная.Артикул,
| ВТ_ТоварыПолная.ТипКомпенсации,
| ВТ_ТоварыПолная.ШтрихКод,
| топ_СоответствиеТоваров.Номенклатура,
| топ_СоответствиеТоваров.Характеристика,
| ВЫБОР
| КОГДА топ_СоответствиеТоваров.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяССылка)
| ТОГДА топ_СоответствиеТоваров.Номенклатура.ЕдиницаИзмерения
| ИНАЧЕ топ_СоответствиеТоваров.Упаковка
| КОНЕЦ,
| ВЫБОР
| КОГДА топ_СоответствиеТоваров.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ");
Запрос.УстановитьПараметр("ЛичныйКабинет",Объект.ЛичныйКабинет);
Запрос.УстановитьПараметр("ТЗ",ТаблицаТоваров);
// письмерова 10.10.2025 BSLR-4515
ВЫборка = Запрос.Выполнить().Выбрать();
// дозаполнение таблицы документа
Пока Выборка.Следующий() Цикл
нСтр = Объект.Компенсации.Добавить();
ЗаполнитьЗначенияСвойств(нСтр,Выборка);
КонецЦикла;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьТаблицуЗагрузкиКомпенсации() Экспорт
СписокТоваров = Новый ТаблицаЗначений;
СписокТоваров.Колонки.Добавить("Артикул",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(150)));
СписокТоваров.Колонки.Добавить("ТипКомпенсации",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(100)));
СписокТоваров.Колонки.Добавить("SKU",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(80)));
СписокТоваров.Колонки.Добавить("Количество",Новый ОписаниеТипов("Число" ,,,, Новый КвалификаторыЧисла(10,3)));
СписокТоваров.Колонки.Добавить("ШтрихКод",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(50)));
СписокТоваров.Колонки.Добавить("СтоимостьТовара",Новый ОписаниеТипов("Число" ,,,, Новый КвалификаторыЧисла(10,2)));
СписокТоваров.Колонки.Добавить("СтоимостьВсего",Новый ОписаниеТипов("Число" ,,,, Новый КвалификаторыЧисла(10,2)));
СписокТоваров.Колонки.Добавить("УменьшеноНаСумму",Новый ОписаниеТипов("Число" ,,,, Новый КвалификаторыЧисла(10,2)));
СписокТоваров.Колонки.Добавить("ИтогоКНачислению",Новый ОписаниеТипов("Число" ,,,, Новый КвалификаторыЧисла(10,2)));
СписокТоваров.Колонки.Добавить("ЭтоНабор",Новый ОписаниеТипов("Булево"));
Возврат СписокТоваров;
КонецФункции
// письмерова 10.10.2025 BSLR-4515
&НаКлиенте
Процедура ЗагрузитьДекомпенсацииИзExcel(Команда)
ВыполнитьЗагрузкуЧерезФайлКомпенсации(Истина);
КонецПроцедуры
//Крупа 09.04.2026 BSLR-5437
// заливка наборов
&НаСервере
Процедура УстановитьУсловноеОформлениеКомпенсация()
ЭлементыФормы = ЭтаФорма.Элементы;
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
ПолеФормы = ЭлементыФормы.Компенсации; // ПолеФормы
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ПолеФормы.Имя);
Если ПолеФормы = Неопределено Тогда
Возврат;
КонецЕсли;
ПолеЭлемента.Использование = Истина;
Отбор = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Компенсации.ЭтоНабор");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Отбор.ПравоеЗначение = Истина;
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.НейтральноЗеленый);
КонецПроцедуры
#КонецОбласти
// письмерова 13.11.2024 BSLR-3215
#Область ПеревыставлениеУслугOZON
// загрузка отчета
&НаКлиенте
Процедура ЗагрузитьОтчетОПеревыставленииУслуг(Команда)
ИспользуютсяГруппыДоступаКонтрагентов = ВернутьКонстантуГруппыДоступовКонтрагентов();
Если РаспределятьПоПоставщикам(Объект.ЛичныйКабинет) И ИспользуютсяГруппыДоступаКонтрагентов И НЕ ЗначениеЗаполнено(ГруппаДоступаПартнера) И СоздаватьКонтрагентов Тогда
сообщение = новый СообщениеПользователю;
сообщение.Текст = "Заполните поле Группа доступа партнера";
сообщение.Сообщить();
Возврат;
КонецЕсли;
Если Объект.ПеревыставлениеУслуг.Количество() Тогда
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопросОбОчищенииПеревыставлениеУслуг", ЭтаФорма);
ПоказатьВопрос(ОписаниеОповещения, "Таблица перевыставления услуг содержит данные. Очистить? Связанные документы будут помечены на удаление.", РежимДиалогаВопрос.ДаНетОтмена);
иначе
ВыполнитьЗагрузкуЧерезФайлПеревыставлениеУслуг();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеОтветаНаВопросОбОчищенииПеревыставлениеУслуг(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Отмена Тогда
Возврат;
КонецЕсли;
Если Результат = КодВозвратаДиалога.Да Тогда
ПометитьНаУделениеСвязанныеПеревыставлениеУслуг();
ВыполнитьЗагрузкуЧерезФайлПеревыставлениеУслуг();
КонецЕсли;
КонецПроцедуры
&НаСервере
ПРоцедура ПометитьНаУделениеСвязанныеПеревыставлениеУслуг()
Для Каждого Стр из Объект.ПеревыставлениеУслуг Цикл
Если Стр.ДокументНавигационнаяСсылка = "" Тогда // пустая строка
Продолжить;
КонецЕсли;
НС = Стр.ДокументНавигационнаяСсылка;
// пометка на удаление документа по навигационной ссылке
ПерваяТочка = Найти(НС, "e1cib/data/");
ВтораяТочка = Найти(НС, "?ref=");
ПредставлениеТипа = Сред(НС, ПерваяТочка + 11, ВтораяТочка - ПерваяТочка - 11);
ШаблонЗначения = ЗначениеВСтрокуВнутр(ПредопределенноеЗначение(ПредставлениеТипа + ".ПустаяСсылка"));
ЗначениеСсылки = СтрЗаменить(ШаблонЗначения, "00000000000000000000000000000000", Сред(НС, ВтораяТочка + 5));
СсылкаДляУдаления = ЗначениеИзСтрокиВнутр(ЗначениеСсылки);
Попытка документОб = СсылкаДляУдаления.ПолучитьОбъект(); Исключение КонецПопытки;
Попытка документОб.УстановитьПометкуУдаления(Истина); Исключение КонецПопытки;
КонецЦикла;
Объект.ПеревыставлениеУслуг.Очистить();
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьЗагрузкуЧерезФайлПеревыставлениеУслуг()
Попытка
НачатьПомещениеФайлаНаСервер(Новый ОписаниеОповещения("ВыполнитьЗагрузкуПеревыставлениеУслуг",ЭтаФорма,нЕопределено),,,,,новый УникальныйИдентификатор);
Исключение
ОбщегоНазначенияКлиент.СообщитьПользователю("Не получилось открыть файл. Скорее всего он уже открыт на вашем компьютере");
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьЗагрузкуПеревыставлениеУслуг(Результат,ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
РасширениеФайла = Результат.СсылкаНаФайл.Расширение;
Результат = ЗагрузитьПеревыставлениеУслугИзExcelНаСервере(Результат.Адрес, РасширениеФайла);
Если НЕ Результат.Ошибка Тогда
ЭтаФорма.Модифицированность = Истина;
// письмерова 28.11.2024 BSLR-3215
Если РаспределятьПоПоставщикам(Объект.ЛичныйКабинет) Тогда
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопросОЗагрузкеРеестраСЧФ", ЭтаФорма);
ПоказатьВопрос(ОписаниеОповещения, "Таблица Перевыставление услуг загружена. Загрузить реестр счетов фактур?", РежимДиалогаВопрос.ДаНет);
КонецЕсли;
КонецЕсли;
// письмерова 24.02.2025 BSLR-4378
Если Объект.Документы.Количество() = 0 ТОгда
// удаление услуги экваринг, т.к. он дублирует данные из загрузки перевыставления услуг
УдалениеУслугиЭкваринга();
КонецЕсли;
УстановитьВидимостьДоступность();
КонецПроцедуры
&НаСервере
Функция ЗагрузитьПеревыставлениеУслугИзExcelНаСервере(Знач Адрес, Расширение)
Результат = Новый Структура("Ошибка, Сообщение", Ложь, "");
ПерваяСтрока = 0;
ЕстьДанныеОтправления = Ложь;
ТаблицаТоваров = ПолучитьТаблицуЗагрузкиПеревыставлениеУслуг();
ФайлВременногоХранилища = ПолучитьИзВременногоХранилища(Адрес);
ИмяФайла = ПолучитьИмяВременногоФайла(Расширение);
Если Расширение <> ".xls" И Расширение <> ".xlsx" Тогда
Результат.Ошибка = Истина;
Результат.Сообщение = "Ошибка при загрузке файла, можно загрузить только файл формата Excel";
Сообщить(Результат.Сообщение);
Возврат Результат;
КонецЕсли;
Попытка
ФайлВременногоХранилища.Записать(ИмяФайла);
Исключение
Результат.Ошибка = Истина;
Результат.Сообщение = "Ошибка при загрузке файла, повторите попытку";
Сообщить(Результат.Сообщение);
Возврат Результат;
КонецПопытки;
УдалитьИзВременногоХранилища(Адрес);
MXL = Новый ТабличныйДокумент;
MXL.Прочитать(ИмяФайла);
Файл = Новый Файл(ИмяФайла);
Если Файл.Существует() Тогда
УдалитьФайлы(ИмяФайла);
КонецЕсли;
КоличествоСтрок = MXL.ВысотаТаблицы;
КоличествоКолонок = MXL.ШиринаСтраницы;
Для ТекущаяСтрока = 1 По КоличествоСтрок Цикл
Для ТекущаяКолонка = 1 По КоличествоКолонок Цикл
ТекстЯчейки = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + ТекущаяКолонка).ТекущаяОбласть.Текст);
Если ТекстЯчейки = "№" Тогда
ПерваяСтрока = ТекущаяСтрока + 1;
КонецЕсли;
Если ЗначениеЗаполнено(ПерваяСтрока) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(ПерваяСтрока) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если ПерваяСтрока = 0 Тогда
Результат.Ошибка = Истина;
ОбщегоНазначения.СообщитьПользователю("Выбран не тот документ, скачайте из ЛК на маркетплейсе документ ""Отчет о перевыставлении услуг """);
Возврат Результат;
КонецЕсли;
НомераКолонокФайла = СоответствиеКолонокФайлаЗагрузкиПеревыставлениеУслуг(MXL, ПерваяСтрока-2);
ПустаяСтрока = 0;
Индекс = 1;
Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок-1 Цикл
Если ПустаяСтрока > 2 Тогда
Прервать; // таблица закончена, остались только подписи
КонецЕсли;
Если Не ЗначениеЗаполнено(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C2").ТекущаяОбласть.Текст)) ТОгда
ПустаяСтрока = ПустаяСтрока + 1; // колонка № п/п
ПРодолжить;
КонецЕсли;
Если СтрНайти(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C2").ТекущаяОбласть.Текст),"Итого")>0 Тогда
ПустаяСтрока = ПустаяСтрока + 1; // итоги по таблице
Прервать;
КонецЕсли;
НоваяСтрока = ТаблицаТоваров.Добавить();
ЗаполнитьСтрокуТаблицыТоваровПеревыставлениеУслуг(НоваяСтрока, MXL, ТекущаяСтрока, НомераКолонокФайла);
Если Объект.ЛичныйКабинет.СоздаватьОтдельныеДокументыДляУслугСНДС ТОгда // всем индекс, что бы не потерять данные
// письмерова 28.11.2024 BSLR-3215
Если НоваяСтрока.СуммаНДС <> 0 Тогда // только тем у кого есть ндс
НоваяСтрока.Индекс = Индекс;
Индекс = Индекс + 1;
КонецЕсли;
КонецЕсли;
КонецЦикла;
// письмерова 28.11.2024 BSLR-3215
Если НЕ Объект.ЛичныйКабинет.СоздаватьОтдельныеДокументыДляУслугСНДС ТОгда
ТаблицаТоваров.Свернуть("Исполнитель,ИНН,КПП,НаименованиеУслуги", "Сумма");
ТаблицаТоваров.Колонки.Добавить("СуммаНДС",Новый ОписаниеТипов("Число" ,,,, Новый КвалификаторыЧисла(10,2)));
Иначе
ТаблицаТоваров.Свернуть("Исполнитель,ИНН,КПП,НаименованиеУслуги,СуммаНДС,Индекс", "Сумма");
КонецЕсли;
ДополнитьДаннымиТоваровИНоменклатурыПеревыставлениеУслуг(ТаблицаТоваров);
Возврат Результат;
КонецФункции
&НаСервереБезКонтекста
Функция СоответствиеКолонокФайлаЗагрузкиПеревыставлениеУслуг(MXL, СтрокаЗаголовков)
Результат = Новый Структура;
Результат.Вставить("Исполнитель", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Исполнитель"));
Результат.Вставить("ИНН", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "ИНН"));
Результат.Вставить("КПП", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "КПП"));
Результат.Вставить("НаименованиеУслуги", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Наименование работ, услуг"));
Результат.Вставить("Сумма", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Сумма с НДС (Руб.)"));
Результат.Вставить("СуммаНДС", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Сумма НДС* (Руб.)"));
// реестр
Результат.Вставить("НомерСЧФАКТ",УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Номер счёта-фактуры"));
Результат.Вставить("ДатаСЧФАКТ",УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Дата счёта-фактуры"));
Возврат Результат;
КонецФункции
&НаСервереБезКонтекста
Функция ПолучитьТаблицуЗагрузкиПеревыставлениеУслуг() Экспорт
СписокТоваров = Новый ТаблицаЗначений;
СписокТоваров.Колонки.Добавить("Исполнитель",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(150)));
СписокТоваров.Колонки.Добавить("ИНН",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(20)));
СписокТоваров.Колонки.Добавить("КПП",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(20)));
СписокТоваров.Колонки.Добавить("НаименованиеУслуги",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(250)));
СписокТоваров.Колонки.Добавить("Сумма",Новый ОписаниеТипов("Число" ,,,, Новый КвалификаторыЧисла(10,2)));
СписокТоваров.Колонки.Добавить("СуммаНДС",Новый ОписаниеТипов("Число" ,,,, Новый КвалификаторыЧисла(10,2)));
// не корректная свертка, т.к. по одному поставщику могут быть абсолютер одинаковые строки, поэтому
// проставляем индекс в строки с непустым инн и только потом сворачиваем
СписокТоваров.Колонки.Добавить("Индекс",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(10)));
// для реестра сч/факт
СписокТоваров.Колонки.Добавить("НомерСЧФАКТ",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(10)));
СписокТоваров.Колонки.Добавить("ДатаСЧФАКТ",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(10)));
Возврат СписокТоваров;
КонецФункции
&НаСервере
Процедура ЗаполнитьСтрокуТаблицыТоваровПеревыставлениеУслуг(СтрокаПриемник, ТабличныйДокумент, ТекущаяСтрока, НомераКолонокФайла, ЭтоРЕЕСТРСЧФ = Ложь, СтандартныйФормат = Истина)
XMLТекущаяСтрока = XMLСтрока(ТекущаяСтрока);
СтрокаПриемник.Исполнитель = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Исполнитель).ТекущаяОбласть.Текст);
СтрокаПриемник.ИНН = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ИНН).ТекущаяОбласть.Текст);
СтрокаПриемник.КПП = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.КПП).ТекущаяОбласть.Текст);
СтрокаПриемник.НаименованиеУслуги = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НаименованиеУслуги).ТекущаяОбласть.Текст);
//Попытка
СтрокаПриемник.Сумма = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Сумма).ТекущаяОбласть.Текст);
//Исключение
// СуммаСтрокой = ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Сумма).ТекущаяОбласть.Текст;
// СуммаСтрокой = СтрЗаменить(СуммаСтрокой, ",", "");
// СуммаСтрокой = СтрЗаменить(СуммаСтрокой, " ", ""); //Крупа BSLR-5354
// СтрокаПриемник.Сумма = Число(СуммаСтрокой); //Крупа BSLR-5354
//КонецПопытки;
//Попытка
СтрокаПриемник.СуммаНДС = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СуммаНДС).ТекущаяОбласть.Текст);
//Исключение
// СуммаНДССтрокой = ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СуммаНДС).ТекущаяОбласть.Текст;
// СуммаНДССтрокой = СтрЗаменить(СуммаНДССтрокой, ",", "");
// СуммаНДССтрокой = СтрЗаменить(СуммаНДССтрокой, " ", ""); //Крупа BSLR-5354
// СтрокаПриемник.СуммаНДС = Число(СуммаНДССтрокой);
//КонецПопытки;
Если ЭтоРЕЕСТРСЧФ Тогда
СтрокаПриемник.НомерСЧФАКТ = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НомерСЧФАКТ).ТекущаяОбласть.Текст);
СтрокаПриемник.ДатаСЧФАКТ = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ДатаСЧФАКТ).ТекущаяОбласть.Текст);
Иначе
// если не разделять по поставщикам - очистим строки без ндс,
// они будуь свернуты и поставщик там будет ООО Интернет решения
Если НЕ Объект.ЛичныйКабинет.СоздаватьОтдельныеДокументыДляУслугСНДС ТОгда
//Если СтрокаПриемник.СуммаНДС = 0 Тогда письмерова 28.11.2024 BSLR-3215 - всех затираем
СтрокаПриемник.Исполнитель = "";
СтрокаПриемник.ИНН = "";
СтрокаПриемник.КПП = "";
//КонецЕсли;
Иначе // письмерова 28.11.2024 BSLR-3215 - затираем только нулевые ндс
Если СтрокаПриемник.СуммаНДС = 0 Тогда
СтрокаПриемник.Исполнитель = "";
СтрокаПриемник.ИНН = "";
СтрокаПриемник.КПП = "";
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ДополнитьДаннымиТоваровИНоменклатурыПеревыставлениеУслуг(ТаблицаТоваров)
// письмерова 17.12.2024 BSLR-4200
// услуги могут перименовать
// предварительно нужно выявить такие
ВремТабл = ТаблицаТоваров.Скопировать(,"НаименованиеУслуги");
ВремТабл.Свернуть("НаименованиеУслуги");
// проверим есть ли УслгаТП по наименованию
Для Каждого Стр из ВремТабл Цикл
УслугаТП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоНаименованию(Стр.НаименованиеУслуги);
Если УслугаТП = Справочники.топ_УслугиТорговыхПлощадок.ПустаяСсылка() Тогда
// создаем услугу и номенклатуру
Перечень = Новый соответствие;
Перечень.Вставить(СТРЗаменить(Стр.НаименованиеУслуги," ",""),Стр.НаименованиеУслуги);
ПереченьНДС = Новый соответствие;
ПереченьНДС.Вставить(СТРЗаменить(Стр.НаименованиеУслуги," ",""),"20%");
топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.СоздатьЭлементыНоменклатурыУслугМП(Перечень,ПереченьНДС,
Перечисления.топ_ТорговыеПлощадки.OZON,
Неопределено);
КонецЕсли;
КонецЦикла;
Запрос = Новый Запрос("ВЫБРАТЬ
| ТЗ.Исполнитель КАК Исполнитель,
| ТЗ.ИНН КАК ИНН,
| ТЗ.КПП КАК КПП,
| ТЗ.НаименованиеУслуги КАК НаименованиеУслуги,
| ТЗ.Сумма КАК Сумма,
| ТЗ.СуммаНДС КАК СуммаНДС
|ПОМЕСТИТЬ ВТ_Таблица
|ИЗ
| &ТЗ КАК ТЗ
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| МАКСИМУМ(Контрагенты.Ссылка) КАК Ссылка,
| Контрагенты.ИНН КАК ИНН
|ПОМЕСТИТЬ ВТ_Контрагенты
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| НЕ Контрагенты.ПометкаУдаления
|
|СГРУППИРОВАТЬ ПО
| Контрагенты.ИНН
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_Таблица.Исполнитель КАК Исполнитель,
| ВТ_Таблица.Исполнитель КАК НаименованиеПокупателя,
| """" КАК ЮридическийАдресПокупателя,
| ВТ_Таблица.ИНН КАК ИНН,
| ВТ_Таблица.КПП КАК КПП,
| ВТ_Таблица.НаименованиеУслуги КАК НаименованиеУслуги,
| ВТ_Таблица.Сумма КАК Сумма,
| ВТ_Таблица.СуммаНДС КАК СуммаНДС,
| ВЫБОР
| КОГДА ВТ_Таблица.ИНН = """"
| ТОГДА &ИнтернетРешения
| ИНАЧЕ ЕСТЬNULL(ВТ_Контрагенты.Ссылка, ВТ_Таблица.Исполнитель + "" (ИНН "" + ВТ_Таблица.ИНН + "" ,КПП "" + ВТ_Таблица.КПП + "")"")
| КОНЕЦ КАК Поставщик,
| топ_СопоставлениеНоменклатурыУслуг.УслугаМП КАК УслугаМП,
| топ_СопоставлениеНоменклатурыУслуг.НоменклатураУслуги КАК Номенклатура,
| ВЫБОР
| КОГДА ВТ_Таблица.СуммаНДС = 0
| ТОГДА ""Без НДС""
// письмерова 21.07.2025 BSLR-4782
| ИНАЧЕ ВЫБОР
| КОГДА топ_СопоставлениеНоменклатурыУслуг.УслугаМП.СтавкаНДС <> """"
| ТОГДА топ_СопоставлениеНоменклатурыУслуг.УслугаМП.СтавкаНДС
| ИНАЧЕ топ_СопоставлениеНоменклатурыУслуг.НоменклатураУслуги.СтавкаНДС
| КОНЕЦ
| КОНЕЦ КАК СтавкаНДС
|ИЗ
| ВТ_Таблица КАК ВТ_Таблица
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Контрагенты КАК ВТ_Контрагенты
| ПО ВТ_Таблица.ИНН = ВТ_Контрагенты.ИНН
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.топ_СопоставлениеНоменклатурыУслуг КАК топ_СопоставлениеНоменклатурыУслуг
| ПО ВТ_Таблица.НаименованиеУслуги = топ_СопоставлениеНоменклатурыУслуг.УслугаМП.Наименование");
Запрос.УстановитьПараметр("ЛичныйКабинет",Объект.ЛичныйКабинет);
Запрос.УстановитьПараметр("ИнтернетРешения",Объект.ЛичныйКабинет.Контрагент);
Запрос.УстановитьПараметр("ТЗ",ТаблицаТоваров);
//Крупа BSLR-5355 24.03.2026
УстановитьПривилегированныйРежим(Истина);
ТаблицаИтоговая = Запрос.Выполнить().Выгрузить();
УстановитьПривилегированныйРежим(Ложь);
ТаблицаИтоговая.Сортировать("Поставщик");
Если СоздаватьКонтрагентов ТОгда
Для Каждого Стр из ТаблицаИтоговая Цикл
Если ТипЗнч(Стр.Поставщик) = Тип("Строка") Тогда
НовыйКонтрагент = СоздатьЮЛ(Стр,Объект.ЛичныйКабинет.Организация, истина);
Сообщить("Создан новый контрагент " + НовыйКонтрагент);
Стр.Поставщик = НовыйКонтрагент.Ссылка;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Объект.ПеревыставлениеУслуг.Очистить();
Объект.ПеревыставлениеУслуг.Загрузить(ТаблицаИтоговая);
КонецПроцедуры
// письмерова 24.02.2025 BSLR-4378
&НаСервере
Процедура УдалениеУслугиЭкваринга()
Для Каждого Стр из Объект.Услуги Цикл
Если Стр.НаименованиеМП = "MarketplaceRedistributionOfAcquiringOperation"
Или Стр.НаименованиеМП = "OperationMarketplacePackageRedistribution" Тогда // BSLR-4908
Объект.Услуги.Удалить(Стр);
//Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
// загрузка реестра
&НаКлиенте
Процедура ПослеОтветаНаВопросОЗагрузкеРеестраСЧФ(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Отмена Тогда
Возврат;
КонецЕсли;
Если Результат = КодВозвратаДиалога.Да Тогда
ЗагрузитьРеестрСФ(Неопределено);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьРеестрСФ(Команда)
Попытка
НачатьПомещениеФайлаНаСервер(Новый ОписаниеОповещения("ВыполнитьЗагрузкуПеревыставлениеУслугРЕЕСТРСЧФ",ЭтаФорма,нЕопределено),,,,,новый УникальныйИдентификатор);
Исключение
ОбщегоНазначенияКлиент.СообщитьПользователю("Не получилось открыть файл. Скорее всего он уже открыт на вашем компьютере");
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьЗагрузкуПеревыставлениеУслугРЕЕСТРСЧФ(Результат,ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
РасширениеФайла = Результат.СсылкаНаФайл.Расширение;
Результат = ЗагрузитьПеревыставлениеУслугРЕЕСТРСЧФИзExcelНаСервере(Результат.Адрес, РасширениеФайла);
Если НЕ Результат.Ошибка Тогда
ЭтаФорма.Модифицированность = Истина;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ЗагрузитьПеревыставлениеУслугРЕЕСТРСЧФИзExcelНаСервере(Знач Адрес, Расширение)
Результат = Новый Структура("Ошибка, Сообщение", Ложь, "");
ПерваяСтрока = 0;
ЕстьДанныеОтправления = Ложь;
ТаблицаТоваров = ПолучитьТаблицуЗагрузкиПеревыставлениеУслуг();
ФайлВременногоХранилища = ПолучитьИзВременногоХранилища(Адрес);
ИмяФайла = ПолучитьИмяВременногоФайла(Расширение);
Если Расширение <> ".xls" И Расширение <> ".xlsx" Тогда
Результат.Ошибка = Истина;
Результат.Сообщение = "Ошибка при загрузке файла, можно загрузить только файл формата Excel";
Сообщить(Результат.Сообщение);
Возврат Результат;
КонецЕсли;
Попытка
ФайлВременногоХранилища.Записать(ИмяФайла);
Исключение
Результат.Ошибка = Истина;
Результат.Сообщение = "Ошибка при загрузке файла, повторите попытку";
Сообщить(Результат.Сообщение);
Возврат Результат;
КонецПопытки;
УдалитьИзВременногоХранилища(Адрес);
//Крупа 5354 +++
//пробуем прочитать как СпособЧтенияЗначенийТабличногоДокумента.Текст
СтандартныйФорматЗначений = Истина;
Попытка
MXL = Новый ТабличныйДокумент;
MXL.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Текст); //Крупа 5354
Файл = Новый Файл(ИмяФайла);
//Если Файл.Существует() Тогда
//
// УдалитьФайлы(ИмяФайла);
//
//КонецЕсли;
КоличествоСтрок = MXL.ВысотаТаблицы;
КоличествоКолонок = MXL.ШиринаСтраницы;
Для ТекущаяСтрока = 1 По КоличествоСтрок Цикл
Для ТекущаяКолонка = 1 По КоличествоКолонок Цикл
ТекстЯчейки = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + ТекущаяКолонка).ТекущаяОбласть.Текст);
Если ТекстЯчейки = "№" Тогда
ПерваяСтрока = ТекущаяСтрока + 1;
КонецЕсли;
Если ЗначениеЗаполнено(ПерваяСтрока) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(ПерваяСтрока) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если ПерваяСтрока = 0 Тогда
Результат.Ошибка = Истина;
ОбщегоНазначения.СообщитьПользователю("Выбран не тот документ, скачайте из ЛК на маркетплейсе документ ""Реестр по агентам и счетам-фактурам""");
Возврат Результат;
КонецЕсли;
НомераКолонокФайла = СоответствиеКолонокФайлаЗагрузкиПеревыставлениеУслуг(MXL, ПерваяСтрока-2);
ПустаяСтрока = 0;
Индекс = 1;
Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок-1 Цикл
Если ПустаяСтрока > 2 Тогда
Прервать; // таблица закончена, остались только подписи
КонецЕсли;
Если Не ЗначениеЗаполнено(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C2").ТекущаяОбласть.Текст)) ТОгда
ПустаяСтрока = ПустаяСтрока + 1; // колонка № п/п
ПРодолжить;
КонецЕсли;
Если СтрНайти(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C2").ТекущаяОбласть.Текст),"Итого")>0 Тогда
ПустаяСтрока = ПустаяСтрока + 1; // итоги по таблице
Прервать;
КонецЕсли;
НоваяСтрока = ТаблицаТоваров.Добавить();
ЗаполнитьСтрокуТаблицыТоваровПеревыставлениеУслуг(НоваяСтрока, MXL, ТекущаяСтрока, НомераКолонокФайла, Истина, СтандартныйФорматЗначений);
КонецЦикла;
ДополнитьДаннымиИзРеестраСЧФПеревыставлениеУслуг(ТаблицаТоваров);
Исключение
СтандартныйФорматЗначений = Ложь;
КонецПопытки;
//пробуем прочитать через СпособЧтенияЗначенийТабличногоДокумента.Значение
Если НЕ СтандартныйФорматЗначений Тогда
Попытка
MXL = Новый ТабличныйДокумент;
MXL.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
Файл = Новый Файл(ИмяФайла);
Если Файл.Существует() Тогда
УдалитьФайлы(ИмяФайла);
КонецЕсли;
КоличествоСтрок = MXL.ВысотаТаблицы;
КоличествоКолонок = MXL.ШиринаСтраницы;
Для ТекущаяСтрока = 1 По КоличествоСтрок Цикл
Для ТекущаяКолонка = 1 По КоличествоКолонок Цикл
ТекстЯчейки = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + ТекущаяКолонка).ТекущаяОбласть.Текст);
Если ТекстЯчейки = "№" Тогда
ПерваяСтрока = ТекущаяСтрока + 1;
КонецЕсли;
Если ЗначениеЗаполнено(ПерваяСтрока) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(ПерваяСтрока) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если ПерваяСтрока = 0 Тогда
Результат.Ошибка = Истина;
ОбщегоНазначения.СообщитьПользователю("Выбран не тот документ, скачайте из ЛК на маркетплейсе документ ""Реестр по агентам и счетам-фактурам""");
Возврат Результат;
КонецЕсли;
НомераКолонокФайла = СоответствиеКолонокФайлаЗагрузкиПеревыставлениеУслуг(MXL, ПерваяСтрока-2);
ПустаяСтрока = 0;
Индекс = 1;
Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок-1 Цикл
Если ПустаяСтрока > 2 Тогда
Прервать; // таблица закончена, остались только подписи
КонецЕсли;
Если Не ЗначениеЗаполнено(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C2").ТекущаяОбласть.Текст)) ТОгда
ПустаяСтрока = ПустаяСтрока + 1; // колонка № п/п
ПРодолжить;
КонецЕсли;
Если СтрНайти(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C2").ТекущаяОбласть.Текст),"Итого")>0 Тогда
ПустаяСтрока = ПустаяСтрока + 1; // итоги по таблице
Прервать;
КонецЕсли;
НоваяСтрока = ТаблицаТоваров.Добавить();
ЗаполнитьСтрокуТаблицыТоваровПеревыставлениеУслуг(НоваяСтрока, MXL, ТекущаяСтрока, НомераКолонокФайла, Истина, СтандартныйФорматЗначений);
КонецЦикла;
ДополнитьДаннымиИзРеестраСЧФПеревыставлениеУслуг(ТаблицаТоваров);
Исключение
Результат.Ошибка = Истина;
Результат.Сообщение = "Ошибка при чтении значений файла";
Сообщить(Результат.Сообщение);
Возврат Результат;
КонецПопытки;
КонецЕсли;
//Крупа 5354 ---
Возврат Результат;
КонецФункции
&НаСервере
Процедура ДополнитьДаннымиИзРеестраСЧФПеревыставлениеУслуг(ТаблицаТоваров)
// не можем делать через запрос, т.к. в таблицах могут быть строки - полные дубли (без номера сч/факт)
// поэтому делаем в цикле
Для Каждого Стр из ТаблицаТоваров Цикл
//Если Стр.НомерСЧФАКТ = "" Тогда // большинство строк пустые, но нужно пересчитать ставку НДС
// Продолжить;
//КонецЕсли;
Отбор = Новый Структура("ИНН,Сумма,СуммаНДС", Стр.ИНН, Стр.Сумма, Стр.СуммаНДС);
НайтиСтроки = Объект.ПеревыставлениеУслуг.НайтиСтроки(Отбор);
Если НайтиСтроки.Количество() Тогда
Для Каждого Ст Из НайтиСтроки Цикл
НоваяСтавка = ВычислитьСтавкуНДСПоСуммам(Стр.Сумма, Стр.СуммаНДС); //Крупа BSLR-5354
Ст.СтавкаНДС = Справочники.СтавкиНДС.НайтиПоНаименованию(НоваяСтавка); //Крупа BSLR-5354
Если Ст.НомерСчФакт <> "" Тогда // заполнен ранее
Продолжить;
Иначе
Ст.НомерСчФакт = Стр.НомерСЧФАКТ;
Ст.ДатаСчФакт = ?(Стр.ДатаСЧФАКТ = "", "", Дата("" + Стр.ДатаСЧФАКТ + " 0:00:00"));
//Прервать; //закомментировано Крупа BSLR-5354, ндс для дублей не пересчитывался
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ВычислитьСтавкуНДСПоСуммам(Знач СуммаСНДС, Знач СуммаНДС) //Крупа BSLR-5354
Если СуммаНДС = 0 ИЛИ СуммаСНДС = СуммаНДС Тогда
Возврат "Без НДС";
КонецЕсли;
СуммаБезНДС = СуммаСНДС - СуммаНДС;
Если СуммаБезНДС <= 0 Тогда
Возврат "Без НДС";
КонецЕсли;
ФактСтавка = СуммаНДС / СуммаБезНДС * 100;
ДопустимыеСтавки = Новый Массив;
ДопустимыеСтавки.Добавить(5);
ДопустимыеСтавки.Добавить(7);
ДопустимыеСтавки.Добавить(10);
ДопустимыеСтавки.Добавить(22);
БлижайшаяСтавка = ДопустимыеСтавки[0];
МинОтклонение = ?(ФактСтавка - БлижайшаяСтавка < 0, -(ФактСтавка - БлижайшаяСтавка), ФактСтавка - БлижайшаяСтавка);
Для Индекс = 1 По ДопустимыеСтавки.ВГраница() Цикл
ТекСтавка = ДопустимыеСтавки[Индекс];
Отклонение = ?(ФактСтавка - ТекСтавка < 0, -(ФактСтавка - ТекСтавка), ФактСтавка - ТекСтавка);
Если Отклонение < МинОтклонение Тогда
МинОтклонение = Отклонение;
БлижайшаяСтавка = ТекСтавка;
КонецЕсли;
КонецЦикла;
Возврат Строка(БлижайшаяСтавка) + "%";
КонецФункции
// создание документов
&НаСервере
Процедура СоздатьДокументыПеревыставлениеУслугНаСервере()
ДанныеДокумента = Новый Структура("ДокОК, ТаблицаУслуг", Объект.Ссылка, Объект.ПеревыставлениеУслуг.Выгрузить());
Результат = топ_ОбщийВызовСервера.СоздатьДокументыПоступленияПоПеревыставлениеУслугOZON(ДанныеДокумента);
Если Не Результат.Ошибка Тогда
Объект.ПеревыставлениеУслуг.Загрузить(Результат.ДанныеДокумента.ТаблицаУслуг);
Иначе
ОбщегоНазначения.СообщитьПользователю(Результат.Сообщение);
КонецЕсли;
КонецПроцедуры
// BSLR-4203
&НаСервере
Процедура ОчиститьСсылкиНаДокументыНаСервере()
Для Каждого Стр из Объект.ПеревыставлениеУслуг Цикл
Если Стр.ДокументНавигационнаяСсылка = "" Тогда
Продолжить;
КонецЕсли;
НС = Стр.ДокументНавигационнаяСсылка;
// пометка на удаление документа по навигационной ссылке
ПерваяТочка = Найти(НС, "e1cib/data/");
ВтораяТочка = Найти(НС, "?ref=");
ПредставлениеТипа = Сред(НС, ПерваяТочка + 11, ВтораяТочка - ПерваяТочка - 11);
ШаблонЗначения = ЗначениеВСтрокуВнутр(ПредопределенноеЗначение(ПредставлениеТипа + ".ПустаяСсылка"));
ЗначениеСсылки = СтрЗаменить(ШаблонЗначения, "00000000000000000000000000000000", Сред(НС, ВтораяТочка + 5));
СсылкаДляУдаления = ЗначениеИзСтрокиВнутр(ЗначениеСсылки);
Попытка документОб = СсылкаДляУдаления.ПолучитьОбъект(); Исключение КонецПопытки;
Попытка документОб.УстановитьПометкуУдаления(Истина); Исключение КонецПопытки;
Стр.ДокументНавигационнаяСсылка = "";
Стр.ДокументУИД = "";
КонецЦикла;
КонецПроцедуры
// BSLR-4203
&НаКлиенте
Процедура ОчиститьСсылкиНаДокументы(Команда)
ОчиститьСсылкиНаДокументыНаСервере();
УстановитьВидимостьДоступность();
КонецПроцедуры
&НаКлиенте
Процедура СоздатьДокументыПеревыставлениеУслуг(Команда)
ЕстьНезаполненыеЮЛ = ПроверитьЗаполнениеЮЛ(Истина);
Если ЕстьНезаполненыеЮЛ Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю("Не все партнеры/контрагенты заполнены. Создайте нужных контрагентов или повторите загрузку данных о перевыставленных услугах с включеным флагом ""Создавать контрагентов (если есть продажи юр.лицам)""");
Возврат;
КонецЕсли;
ЭтаФорма.Записать();
СоздатьДокументыПеревыставлениеУслугНаСервере();
ЭтаФорма.Записать(); // сохранение созданных типовых документов в ОК
КонецПроцедуры
&НаКлиенте
Процедура ПеревыставлениеУслугДокументУИДОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТекущиеДанные = Элементы.ПеревыставлениеУслуг.ТекущиеДанные;
ПерейтиПоНавигационнойСсылке(ТекущиеДанные.ДокументНавигационнаяСсылка);
КонецПроцедуры
// BSLR-4203
&НаКлиенте
Функция ЕстьДокуметыПеревыставления()
Для Каждого Стр из Объект.ПеревыставлениеУслуг Цикл
Если Стр.ДокументНавигационнаяСсылка <> "" Тогда
Возврат истина;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции
// письмерова 13.03.2025 BSLR-4423
// оформление отрицательных сумм
&НаСервере
Процедура УстановитьУсловноеОформлениеПеревыставлениеУслуг()
ЭлементыФормы = ЭтаФорма.Элементы;
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
ПолеФормы = ЭлементыФормы.ПеревыставлениеУслугДокументУИД; // ПолеФормы
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ПолеФормы.Имя);
ОтборЭлемента = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ПеревыставлениеУслуг.Сумма");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно;
ОтборЭлемента.ПравоеЗначение = 0;
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветОсобогоТекста);
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<обработать вручную>'"));
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
КонецПроцедуры
#КонецОбласти
// письмерова 02.09.2025 BSLR-4698
#Область РеестрЮрЛицВБ
// апи
&НаКлиенте
Процедура ЗапроситьРеестрЮрЛиц(Команда)
ИспользуютсяГруппыДоступаКонтрагентов = ВернутьКонстантуГруппыДоступовКонтрагентов();
Если ИспользуютсяГруппыДоступаКонтрагентов И НЕ ЗначениеЗаполнено(ГруппаДоступаПартнера) И СоздаватьКонтрагентов Тогда
сообщение = новый СообщениеПользователю;
сообщение.Текст = "Заполните поле Группа доступа партнера";
сообщение.Сообщить();
Возврат;
КонецЕсли;
ПараметрыКоманды = Новый Структура("ЛичныйКабинет, Период",Объект.ЛичныйКабинет, Период);
Результат = топ_РаботаСМаркетплейсами_Wildberries.ЗапроситьДанныеПоРеестрамПродажЮрЛицамWB(ПараметрыКоманды);
ТаблицаРеестровЮЛ.Очистить();
Для Каждого Эл из Результат.Данные Цикл
нСтр = ТаблицаРеестровЮЛ.Добавить();
нСтр.ИДРеестра = Эл.serviceName;
КонецЦикла;
Если ТаблицаРеестровЮЛ.Количество() Тогда
ЗапроситьДанныеРеестров();
Иначе
ОбщегоНазначенияКлиент.СообщитьПользователю("Нет данных по реестрам продаж юр.лицам за период");
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗапроситьДанныеРеестров()
ПараметрыКоманды = Новый Структура("ЛичныйКабинет, Реестр",Объект.ЛичныйКабинет, "");
ТаблицаДанныхЮЛ = ПолучитьТаблицуДанныхЮЛOZON();
Для Каждого Стр из ТаблицаРеестровЮЛ Цикл
ПараметрыКоманды.Реестр = Стр.ИДРеестра;
Результат = топ_РаботаСМаркетплейсами_Wildberries.ЗапроситьДанныеРеестраWB(ПараметрыКоманды);
Если НЕ Результат.Ошибка ТОгда
Если Результат.ДанныеФайла <> "" Тогда
// обработать файл
// BSLR-4964 ++
МассивЮЛ = ОбработатьРеестрЮрЛицНаСервере(Результат.ДанныеФайла);
Для Каждого ДанныеЮЛ из МассивЮЛ Цикл
нСтр = ТаблицаДанныхЮЛ.ДОбавить();
ЗаполнитьЗначенияСвойств(нСтр,ДанныеЮЛ);
нСтр.ДатаСчФакт = ?(ДанныеЮЛ.ДатаСчФакт = "", "", Дата("" + ДанныеЮЛ.ДатаСчФакт + " 0:00:00"));
КонецЦикла; // BSLR-4964 --
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ТаблицаДанныхЮЛ.Количество() Тогда
// обработка таб части, заполнение данных по ЮЛ, поиск контрагента по ИНН
// если не нашли - пишем ИНН + Наименование и сообщаем пользователю
Результат = ДополнитьДаннымиЮЛOZON(ТаблицаДанныхЮЛ);
Если Результат.Ошибка Тогда
Результат.Ошибка = Истина;
ОбщегоНазначения.СообщитьПользователю(Результат.Сообщение);
КонецЕсли;
КонецЕсли;
КонецПРоцедуры
Функция ОбработатьРеестрЮрЛицНаСервере(ДанныеФайла)
ИмяФайла = ПолучитьИмяВременногоФайла("zip");
ДвДанные = Base64Значение(ДанныеФайла);
МассивЮЛ = новый Массив; // BSLR-4964
Если ДвДанные = Неопределено Тогда
ОбщегоНазначения.СообщитьПользователю("Ошибка формата файла реестра");
Иначе
ДвДанные.Записать(ИмяФайла);
Архив = Новый ЧтениеZipФайла(ИмяФайла);
ВремКаталог = КаталогВременныхФайлов();
// очистка Temp
Попытка
УдалитьФайлы(ВремКаталог,"*.xlsx");
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Архив.ИзвлечьВсе(ВремКаталог,РежимВосстановленияПутейФайловZIP.Восстанавливать);
// Распакуем файлы по одиночке.
Для Каждого Элемент Из Архив.Элементы Цикл
Архив.Извлечь(Элемент, ВремКаталог,
РежимВосстановленияПутейФайловZIP.Восстанавливать,"");
КонецЦикла;
Таблица = Новый ТаблицаЗначений;
//ТаблицаИТОГОВАЯ = ПолучитьТаблицуЗагрузкиТоваровСбер();
НайденныеФайлы = НайтиФайлы(ВремКаталог, "*.xlsx");
Если НайденныеФайлы.Количество() = 0 Тогда
НайденныеФайлы = НайтиФайлы(ВремКаталог, "*.XLSX");
КонецЕсли;
Для Каждого Файл_объект из НайденныеФайлы Цикл
ИмяФайла = Файл_объект.ПолноеИмя;
MXL = Новый ТабличныйДокумент;
MXL.Прочитать(ИмяФайла);
Файл = Новый Файл(ИмяФайла);
Если Файл.Существует() Тогда
УдалитьФайлы(ИмяФайла);
КонецЕсли;
КоличествоСтрок = MXL.ВысотаТаблицы;
КоличествоКолонок = MXL.ШиринаСтраницы;
Для ТекущаяСтрока = 1 По КоличествоСтрок Цикл
Для ТекущаяКолонка = 1 По КоличествоКолонок Цикл
ТекстЯчейки = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + ТекущаяКолонка).ТекущаяОбласть.Текст);
Если ТекстЯчейки = "ТипДокумента" Тогда
ПерваяСтрока = ТекущаяСтрока + 1;
КонецЕсли;
КонецЦикла;
КонецЦикла;
НомераКолонокФайла = СоответствиеКолонокРеестрЮрЛицВБ(MXL, ПерваяСтрока-1);
ПустаяСтрока = 0;
Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок-1 Цикл
Если ПустаяСтрока > 3 Тогда
Прервать; // таблица закончена, остались только подписи
КонецЕсли;
Если СтрНайти(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C2").ТекущаяОбласть.Текст),"Итого")>0 Тогда
ПустаяСтрока = ПустаяСтрока + 1; // итоги по таблице
Прервать;
КонецЕсли;
XMLТекущаяСтрока = XMLСтрока(ТекущаяСтрока);
SRID = Строка(MXL.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.SRID).ТекущаяОбласть.Текст);
Если Не ЗначениеЗаполнено(SRID) ТОгда
ПустаяСтрока = ПустаяСтрока + 1; // колонка SRID
ПРодолжить;
КонецЕсли;
НайтиСтроки = Объект.Товары.НайтиСтроки(Новый Структура("Идентификатор",SRID));
Если НайтиСтроки.Количество() ТОгда
ДанныеЮЛ = Новый Структура("НаименованиеПокупателя,ИНН,НомерСчФакт,ДатаСчФакт,КПП,ЮридическийАдресПокупателя,SRID", // BSLR-4964
"","","","","","","");
ДанныеЮЛ.НаименованиеПокупателя = Строка(MXL.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Покупатель).ТекущаяОбласть.Текст);
ДанныеЮЛ.ИНН = Строка(MXL.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ИНН).ТекущаяОбласть.Текст);
ДанныеЮЛ.КПП = Строка(MXL.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.КПП).ТекущаяОбласть.Текст);
ДанныеЮЛ.ЮридическийАдресПокупателя = Строка(MXL.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Адрес).ТекущаяОбласть.Текст);
ДанныеЮЛ.НомерСЧФАКТ = Строка(MXL.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НомерСЧФАКТ).ТекущаяОбласть.Текст);
ДанныеЮЛ.ДатаСЧФАКТ = Строка(MXL.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ДатаСЧФАКТ).ТекущаяОбласть.Текст);
ДанныеЮЛ.SRID = SRID;
МассивЮЛ.Добавить(ДанныеЮЛ); // BSLR-4964
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
Возврат МассивЮЛ; // BSLR-4964
КонецФункции
&НаСервереБезКонтекста
Функция СоответствиеКолонокРеестрЮрЛицВБ(MXL, СтрокаЗаголовков)
Результат = Новый Структура;
Результат.Вставить("Покупатель", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Наименование покупателя"));
Результат.Вставить("ИНН", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "ИНН покупателя"));
Результат.Вставить("КПП", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "КПП покупателя"));
Результат.Вставить("Адрес", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Юридический адрес покупателя"));
Результат.Вставить("SRID", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "SRID"));
Результат.Вставить("НомерСЧФАКТ",УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Номер документа"));
Результат.Вставить("ДатаСЧФАКТ",УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Дата документа"));
Возврат Результат;
КонецФункции
// BSLR-4895 файл
&НаКлиенте
Процедура ВыполнитьЗагрузкуРеестраЮЛ(Результат, ДопПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
МассивАдресов = Новый Массив;
Для Каждого Эл Из Результат Цикл
ДанныеФайла = Новый Структура("Адрес,Расширение", Эл.Адрес, Эл.СсылкаНаФайл.Расширение);
МассивАдресов.Добавить(ДанныеФайла);
КонецЦикла;
Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
РезультатВыполнения = ЗагрузитьРеестрыЮЛНаСервереВБ(МассивАдресов);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ЗагрузитьРеестрыЮЛНаСервереВБ(МассивАдресов)
ТаблицаДанныхЮЛ = ПолучитьТаблицуДанныхЮЛOZON();
Для Каждого Эл из МассивАдресов Цикл
Адрес = Эл.Адрес;
Расширение = Эл.Расширение;
ФайлВременногоХранилища = ПолучитьИзВременногоХранилища(Адрес);
ИмяФайла = ПолучитьИмяВременногоФайла(Расширение);
Попытка
ФайлВременногоХранилища.Записать(ИмяФайла);
Исключение
ОбщегоНазначения.СообщитьПользователю("Ошибка при загрузке файла, повторите попытку");
Возврат Неопределено;
КонецПопытки;;
УдалитьИзВременногоХранилища(Адрес);
MXL = Новый ТабличныйДокумент;
MXL.Прочитать(ИмяФайла);
Файл = Новый Файл(ИмяФайла);
Если Файл.Существует() Тогда
УдалитьФайлы(ИмяФайла);
КонецЕсли;
КоличествоСтрок = MXL.ВысотаТаблицы;
КоличествоКолонок = MXL.ШиринаСтраницы;
Для ТекущаяСтрока = 1 По КоличествоСтрок Цикл
Для ТекущаяКолонка = 1 По КоличествоКолонок Цикл
ТекстЯчейки = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + ТекущаяКолонка).ТекущаяОбласть.Текст);
Если ТекстЯчейки = "ТипДокумента" Тогда
ПерваяСтрока = ТекущаяСтрока + 1;
КонецЕсли;
КонецЦикла;
КонецЦикла;
НомераКолонокФайла = СоответствиеКолонокРеестрЮрЛицВБ(MXL, ПерваяСтрока-1);
ПустаяСтрока = 0;
Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок-1 Цикл
Если ПустаяСтрока > 3 Тогда
Прервать; // таблица закончена, остались только подписи
КонецЕсли;
Если СтрНайти(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C2").ТекущаяОбласть.Текст),"Итого")>0 Тогда
ПустаяСтрока = ПустаяСтрока + 1; // итоги по таблице
Прервать;
КонецЕсли;
XMLТекущаяСтрока = XMLСтрока(ТекущаяСтрока);
SRID = Строка(MXL.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.SRID).ТекущаяОбласть.Текст);
Если Не ЗначениеЗаполнено(SRID) ТОгда
ПустаяСтрока = ПустаяСтрока + 1; // колонка SRID
ПРодолжить;
КонецЕсли;
НайтиСтроки = Объект.Товары.НайтиСтроки(Новый Структура("Идентификатор",SRID));
Если НайтиСтроки.Количество() ТОгда
ДанныеЮЛ = Новый Структура("НаименованиеПокупателя,ИНН,НомерСчФакт,ДатаСчФакт,КПП,ЮридическийАдресПокупателя,SRID", // BSLR-4964
"","","","","","","");
ДанныеЮЛ.НаименованиеПокупателя = Строка(MXL.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Покупатель).ТекущаяОбласть.Текст);
ДанныеЮЛ.ИНН = Строка(MXL.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ИНН).ТекущаяОбласть.Текст);
ДанныеЮЛ.КПП = Строка(MXL.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.КПП).ТекущаяОбласть.Текст);
ДанныеЮЛ.ЮридическийАдресПокупателя = Строка(MXL.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Адрес).ТекущаяОбласть.Текст);
ДанныеЮЛ.НомерСЧФАКТ = Строка(MXL.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НомерСЧФАКТ).ТекущаяОбласть.Текст);
ДанныеЮЛ.ДатаСЧФАКТ = Строка(MXL.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ДатаСЧФАКТ).ТекущаяОбласть.Текст);
ДанныеЮЛ.SRID = SRID;
нСтр = ТаблицаДанныхЮЛ.ДОбавить();
ЗаполнитьЗначенияСвойств(нСтр,ДанныеЮЛ);
нСтр.ДатаСчФакт = ?(ДанныеЮЛ.ДатаСчФакт = "", "", Дата("" + ДанныеЮЛ.ДатаСчФакт + " 0:00:00"));
КонецЕсли;
КонецЦикла;
КонецЦикла;
Если ТаблицаДанныхЮЛ.Количество() Тогда
// обработка таб части, заполнение данных по ЮЛ, поиск контрагента по ИНН
// если не нашли - пишем ИНН + Наименование и сообщаем пользователю
Результат = ДополнитьДаннымиЮЛOZON(ТаблицаДанныхЮЛ);
Если Результат.Ошибка Тогда
Результат.Ошибка = Истина;
ОбщегоНазначения.СообщитьПользователю(Результат.Сообщение);
КонецЕсли;
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура ЗагрузитьОтчетБаллыЗаСкидки(Команда) //Крупа BSLR-4753
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите отчёт Ozon 'Баллы за скидки'";
Диалог.Фильтр = "Файлы Excel (*.xlsx;*.xls)|*.xlsx;*.xls";
Если Не Диалог.Выбрать() Тогда
Возврат;
КонецЕсли;
Результат = ЗагрузитьОтчетБаллыЗаСкидкиНаСервере(Диалог.ПолноеИмяФайла, Объект.Ссылка);
Для каждого Сообщение Из Результат.Сообщения Цикл
Сообщить(Сообщение);
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ЗагрузитьОтчетБаллыЗаСкидкиНаСервере(Знач ИмяФайла, Знач СсылкаНаДокумент) //Крупа BSLR-4753
Результат = Новый Структура("Сообщения", Новый Массив);
ТабДок = Новый ТабличныйДокумент;
Попытка
ТабДок.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
Исключение
Результат.Сообщения.Добавить("Ошибка чтения файла: " + ОписаниеОшибки());
Возврат Результат;
КонецПопытки;
ЛистНайден = Ложь;
Для Каждого Область Из ТабДок.Области Цикл
ИмяЛиста = Область.Имя;
Если ПустаяСтрока(ИмяЛиста) Тогда
// если имя не задано, мб это единственная область
ЧитаемаяОбласть = ТабДок.ПолучитьОбласть(Область.Имя);
ЛистНайден = Истина;
Прервать;
Иначе
//Если НРег(ИмяЛиста) = "Отчет баллы за скидки" Тогда
ЧитаемаяОбласть = ТабДок.ПолучитьОбласть(Область.Имя);
ЛистНайден = Истина;
Прервать;
//КонецЕсли;
КонецЕсли;
КонецЦикла;
Если Не ЛистНайден Тогда
Результат.Сообщения.Добавить("Не найден лист с данными в файле");
Возврат Результат;
КонецЕсли;
//поиск строки заголовков
СтрокаЗаголовка = 0;
Для НомерСтр = 1 По ЧитаемаяОбласть.ВысотаТаблицы Цикл
Для НомерКол = 1 По ЧитаемаяОбласть.ШиринаТаблицы Цикл
Ячейка = ЧитаемаяОбласть.ПолучитьОбласть(НомерСтр, НомерКол);
ТекстЯчейки = СокрЛП(Ячейка.ВыделенныеОбласти[0].Текст);
Если ТекстЯчейки = "Наименование" Тогда
СтрокаЗаголовка = НомерСтр;
Прервать;
КонецЕсли;
КонецЦикла;
Если СтрокаЗаголовка > 0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если СтрокаЗаголовка = 0 Тогда
Результат.Сообщения.Добавить("В файле не найдена колонка 'Наименование'");
Возврат Результат;
КонецЕсли;
//номера колонок по заголовкам
КолонкаНаименование = 0;
КолонкаСуммаНачисления = 0;
КолонкаСуммаБаллов = 0;
КолонкаИтоговаяСумма = 0;
Для НомерКол = 1 По ЧитаемаяОбласть.ШиринаТаблицы Цикл
Ячейка = ЧитаемаяОбласть.ПолучитьОбласть(СтрокаЗаголовка, НомерКол);
Заголовок1 = СокрЛП(Ячейка.ВыделенныеОбласти[0].Текст);
Если Заголовок1 = "Наименование" Тогда
КолонкаНаименование = НомерКол;
ИначеЕсли Заголовок1 = "Сумма начисления, руб." Тогда
КолонкаСуммаНачисления = НомерКол;
ИначеЕсли Заголовок1 = "Сумма баллов" Тогда
КолонкаСуммаБаллов = НомерКол;
ИначеЕсли Заголовок1 = "Итого сумма по документу, руб." Тогда
КолонкаИтоговаяСумма = НомерКол;
КонецЕсли;
КонецЦикла;
Если КолонкаНаименование = 0 Тогда
Результат.Сообщения.Добавить("Не найдена обязательная колонка 'Наименование'");
Возврат Результат;
КонецЕсли;
ДокументОбъект = Объект;
Если ДокументОбъект = Неопределено Тогда
Результат.Сообщения.Добавить("Не удалось получить объект документа");
Возврат Результат;
КонецЕсли;
ФлагОтражатьКомиссиюОтдельно = ДокументОбъект.ОтражатьКомиссионноеВознаграждениеОтдельнойУслугой;
УслугаКомиссии = ДокументОбъект.ЛичныйКабинет.УслугаКомиссионногоВознаграждения;
КоличествоОбработано = 0;
ЛитералДляУдаления = "Электронная услуга: "; // Стрелкова Н.
ЛитералУслугаПродвижение = "Услуга Продвижение бренда"; // Стрелкова Н.
// обход строк
Для НомерСтр = СтрокаЗаголовка + 1 По ЧитаемаяОбласть.ВысотаТаблицы Цикл
Ячейка = ЧитаемаяОбласть.ПолучитьОбласть(НомерСтр, КолонкаНаименование);
Наименование = СокрЛП(Ячейка.ВыделенныеОбласти[0].Текст);
Если ПустаяСтрока(Наименование) Тогда
Продолжить;
КонецЕсли;
Если СтрНайти(Наименование, ЛитералДляУдаления) Тогда
Наименование = СтрЗаменить(Наименование, ЛитералДляУдаления, "");
ИначеЕсли Наименование = ЛитералУслугаПродвижение Тогда
Наименование = СтрЗаменить(Наименование, "Услуга ", "");
КонецЕсли;
СуммаНачисления = 0;
Если КолонкаСуммаНачисления > 0 Тогда
Ячейка = ЧитаемаяОбласть.ПолучитьОбласть(НомерСтр, КолонкаСуммаНачисления);
ТекстСуммы = СокрЛП(Ячейка.ВыделенныеОбласти[0].Текст);
Если ТекстСуммы <> "" Тогда
Попытка СуммаНачисления = Число(ТекстСуммы);
Исключение
КонецПопытки;
КонецЕсли;
КонецЕсли;
СуммаБаллов = 0;
Если КолонкаСуммаБаллов > 0 Тогда
Ячейка = ЧитаемаяОбласть.ПолучитьОбласть(НомерСтр, КолонкаСуммаБаллов);
ТекстБаллов = СокрЛП(Ячейка.ВыделенныеОбласти[0].Текст);
Если ТекстБаллов <> "" Тогда
Попытка СуммаБаллов = Число(ТекстБаллов);
Исключение
КонецПопытки;
КонецЕсли;
КонецЕсли;
// сумма по документу для вознаграждения
ИтоговаяСумма = 0;
Если КолонкаИтоговаяСумма > 0 Тогда
Ячейка = ЧитаемаяОбласть.ПолучитьОбласть(НомерСтр, КолонкаИтоговаяСумма);
ТекстИтог = СокрЛП(Ячейка.ВыделенныеОбласти[0].Текст);
Если ТекстИтог <> "" Тогда
Попытка
ИтоговаяСумма = Число(ТекстИтог);
Исключение
КонецПопытки;
КонецЕсли;
КонецЕсли;
// поиск услуги в тч
Если ДокументОбъект.Услуги = Неопределено Тогда
Результат.Сообщения.Добавить("Заполните табличную часть Услуги");
Возврат Результат;
КонецЕсли;
Если Наименование = "Вознаграждение за реализацию" Тогда
Если ФлагОтражатьКомиссиюОтдельно Тогда
// поиск услуги комиссионного вознаграждения и замена ее суммы начисления
СтруктураОтбора = Новый Структура("Наименование", УслугаКомиссии);
НайденныеСтроки = ДокументОбъект.Услуги.НайтиСтроки(СтруктураОтбора); // Стрелкова Н. замена Найти на НайтиСтроки
Если НайденныеСтроки.Количество() = 0 Тогда
Результат.Сообщения.Добавить("Не найдена услуга комиссионного вознаграждения: " + УслугаКомиссии);
КонецЕсли;
Для Каждого СтрокаКомиссии Из НайденныеСтроки Цикл
СтрокаКомиссии.СуммаДоВычетаБаллов = СуммаНачисления;
КонецЦикла;
КонецЕсли;
ДокументОбъект.СуммаКомиссииПоУПД = ИтоговаяСумма;
РаспределитьРазницуВДокументе(ДокументОбъект);
КонецЕсли;
НайденнаяСтрока = Неопределено;
Для каждого стр из ДокументОбъект.Услуги Цикл
Если стр.Наименование = Наименование или СтрНайти(стр.УслугаМП.Наименование, Наименование) Тогда //4753 доработка
НайденнаяСтрока = стр;
Прервать
КонецЕсли;
КонецЦикла;
Если НайденнаяСтрока = Неопределено Тогда
//Результат.Сообщения.Добавить("Услуга """ + Наименование + """ не найдена в списке услуг. Перезаполните услуги в ""Стартовом помощнике""");
Продолжить;
КонецЕсли;
// замена "сумма до вычета баллов" на "сумма начисления, руб"
Если СуммаНачисления <> 0 И Наименование <> "Вознаграждение за реализацию" Тогда
НайденнаяСтрока.СуммаДоВычетаБаллов = СуммаНачисления;
КонецЕсли;
Если СуммаБаллов <> 0 Тогда
НайденнаяСтрока.Баллы = СуммаБаллов;
КонецЕсли;
НайденнаяСтрока.Сумма = НайденнаяСтрока.СуммаДоВычетаБаллов - НайденнаяСтрока.Баллы;
КоличествоОбработано = КоличествоОбработано + 1;
КонецЦикла;
Если КоличествоОбработано > 0 Тогда
Результат.Сообщения.Добавить("Сумма комиссии и услуг скорректирована в соответствии с ""Отчетом о начислении и списании баллов""");
Иначе
Результат.Сообщения.Добавить("Не удалось обработать ни одной строки. Проверьте формат файла.");
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСервере
Процедура РаспределитьРазницуВДокументе(ДокументОбъект)
Попытка
РаспределитьРазницуНаСервере();
Исключение
Сообщить("Не удалось автоматически распределить разницу");
КонецПопытки;
КонецПроцедуры
#КонецОбласти