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