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