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