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



&После("ПриСозданииНаСервере")
Процедура кор_ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка, ДополнительныеПараметры)

	Если Форма.ИмяФормы <> "Обработка.топ_АРМ_КладовщикаFBS.Форма.ФормаНоваяВерсияАРМ" Тогда
		Возврат;
	КонецЕсли;

	Для Каждого ИмяСписка Из СтрРазделить("СписокЗаказовНовыеВБ,СписокЗаказов", ",") Цикл
		Попытка
			ДоработатьСписок(Форма, ИмяСписка);
		Исключение
		ЗаписьЖурналаРегистрации(НСтр("ru = 'Штрафы в АРМ кладовщика (FBS)'"),УровеньЖурналаРегистрации.Ошибка,,
			"Обработка.топ_АРМ_КладовщикаFBS.Форма.ФормаНоваяВерсияАРМ" + "." + ИмяСписка,ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
		КонецПопытки;
	КонецЦикла;

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

Функция СтатусыБезШтрафа()

	Статусы = Новый Массив;
	Статусы.Добавить("Доставляется");
	Статусы.Добавить("Доставлен");
	Статусы.Добавить("Отменен");

	Возврат Статусы;

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

Процедура ДоработатьСписок(Форма, ИмяСписка)

	ИмяКолонки = ИмяСписка + "кор_СтатусШтрафа";
	Если Форма.Элементы.Найти(ИмяКолонки) <> Неопределено Тогда
		Возврат;
	КонецЕсли;

	ТаблицаСписка = Форма.Элементы.Найти(ИмяСписка);
	Если ТаблицаСписка = Неопределено Тогда
		Возврат;
	КонецЕсли;

	Список = Форма[ИмяСписка];
	Если Не ДополнитьЗапрос(Список) Тогда
		Возврат;
	КонецЕсли;

	Список.Параметры.УстановитьЗначениеПараметра("кор_ТекущаяДата", ТекущаяДатаСеанса());
	Список.Параметры.УстановитьЗначениеПараметра("кор_СтатусыБезШтрафа", СтатусыБезШтрафа());
	Список.УстановитьОбязательноеИспользование("кор_ПриоритетШтрафа", Истина);

	ДобавитьКолонку(Форма, ТаблицаСписка, ИмяСписка, ИмяКолонки);
	ПоказыватьКолонкуТолькоДляOzon(Форма, ИмяКолонки);
	ПодсветитьСтрокиСоШтрафом(Список);
	ПоставитьШтрафыПервыми(Список);

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

Функция ДополнитьЗапрос(Список)

	МеткаПолей 		= "КОНЕЦ КАК ДатаДоставки,";
	МеткаСоединения = "ПО ВТ_Итоговая.ЗаказТП = топ_ЗаказТорговойПлощадки.Ссылка";
	
	ТекстЗапроса = Список.ТекстЗапроса;
	Если СтрЧислоВхождений(ТекстЗапроса, МеткаПолей) <> 1
		Или СтрЧислоВхождений(ТекстЗапроса, МеткаСоединения) <> 1 Тогда
		Возврат Ложь;
	КонецЕсли;

	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, МеткаПолей, МеткаПолей + Символы.ПС + ТекстПолейШтрафа());
	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, МеткаСоединения, МеткаСоединения + Символы.ПС + ТекстСоединенияСИсториейСтатусов());
	Список.ТекстЗапроса = ТекстЗапроса;

	Возврат Истина;

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

Функция ТекстПолейШтрафа()

	Шаблон =
	"	ВЫБОР
	|		КОГДА топ_ЗаказТорговойПлощадки.ЛичныйКабинет.ТорговаяПлощадка <> ЗНАЧЕНИЕ(Перечисление.топ_ТорговыеПлощадки.OZON)
	|				ИЛИ ЕСТЬNULL(ВТ_Итоговая.УнифицированныйСтатус.Наименование, """") В (&кор_СтатусыБезШтрафа) 
	|					ИЛИ НЕ ВТ_Итоговая.ЗаказТП.Проведен ИЛИ ВТ_Итоговая.ЗаказКлиента.Ссылка ЕСТЬ NULL
	|			ТОГДА %1
	|		КОГДА топ_ЗаказТорговойПлощадки.ДатаЗаказа <= ДОБАВИТЬКДАТЕ(&кор_ТекущаяДата, ЧАС, -36)
	|			ТОГДА %2
	|		КОГДА топ_ЗаказТорговойПлощадки.ДатаЗаказа <= ДОБАВИТЬКДАТЕ(&кор_ТекущаяДата, ЧАС, -24)
	|			ТОГДА %3
	|		ИНАЧЕ %1
	|	КОНЕЦ КАК %4,";

	Возврат СтрШаблон(Шаблон, "3", "1", "2", "кор_ПриоритетШтрафа")
		+ Символы.ПС
		+ СтрШаблон(Шаблон, """Штрафа нет""", """Штраф получен""", """Скоро штраф""", "кор_СтатусШтрафа");

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

Функция ТекстСоединенияСИсториейСтатусов()

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

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

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

	Колонка = Форма.Элементы.Добавить(ИмяКолонки, Тип("ПолеФормы"), ТаблицаСписка);
	Колонка.Вид         = ВидПоляФормы.ПолеНадписи;
	Колонка.ПутьКДанным = ИмяСписка + ".кор_СтатусШтрафа";
	Колонка.Заголовок   = НСтр("ru = 'Штраф'");

	СледующаяКолонка = Форма.Элементы.Найти(ИмяСписка + "СкладПоставщика");
	Если СледующаяКолонка <> Неопределено Тогда
		Форма.Элементы.Переместить(Колонка, СледующаяКолонка.Родитель, СледующаяКолонка);
	КонецЕсли;

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

Процедура ПоказыватьКолонкуТолькоДляOzon(Форма, ИмяКолонки)

	ЭлементОформления = Форма.УсловноеОформление.Элементы.Добавить();

	ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
	ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяКолонки);

	ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("ТорговаяПлощадка");
	ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.НеРавно;
	ЭлементОтбора.ПравоеЗначение = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON");

	ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);

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

Процедура ПодсветитьСтрокиСоШтрафом(Список)

	ЭлементОформления = Список.УсловноеОформление.Элементы.Добавить();

	ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("кор_ПриоритетШтрафа");
	ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.Меньше;
	ЭлементОтбора.ПравоеЗначение = 3;

	ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.ЦветФонаОтрицательногоЗначения);

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

Процедура ПоставитьШтрафыПервыми(Список)

	ЭлементПорядка = Список.Порядок.Элементы.Вставить(0, Тип("ЭлементПорядкаКомпоновкиДанных"));
	ЭлементПорядка.Поле              = Новый ПолеКомпоновкиДанных("кор_ПриоритетШтрафа");
	ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр;
	ЭлементПорядка.Использование     = Истина;

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