#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
#Область Проведение
Процедура ЗарегистрироватьУчетныеМеханизмы(МеханизмыДокумента) Экспорт
МеханизмыДокумента.Добавить("ПланированиеЗапасов");
КонецПроцедуры
Функция ДанныеДокументаДляПроведения(Документ, Регистры, ДопПараметры = Неопределено) Экспорт
Если ДопПараметры = Неопределено Тогда
ДопПараметры = ПроведениеДокументов.ДопПараметрыИнициализироватьДанныеДокументаДляПроведения();
КонецЕсли;
Если ТипЗнч(Документ) = Тип("ДокументОбъект.ПланОстатков") Тогда
ДокументСсылка = Документ.Ссылка;
Иначе
ДокументСсылка = Документ;
КонецЕсли;
Запрос = Новый Запрос;
ТекстыЗапроса = Новый СписокЗначений;
Если Не ДопПараметры.ПолучитьТекстыЗапроса Тогда
ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка);
ТекстЗапросаТаблицаПланыОстатков(Запрос, ТекстыЗапроса, Регистры);
КонецЕсли;
Возврат ПроведениеДокументов.ИнициализироватьДанныеДокументаДляПроведения(Запрос, ТекстыЗапроса, ДопПараметры);
КонецФункции
#КонецОбласти
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт
КонецПроцедуры
Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
БизнесПроцессы.Задание.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
ТорговыеПредложенияПереопределяемый.ДобавитьКомандуПоискаТорговыхПредложений(КомандыСозданияНаОсновании);
КонецПроцедуры
Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт
Если ПравоДоступа("Добавление", Метаданные.Документы.ПланОстатков) Тогда
КомандаСоздатьНаОсновании = КомандыСозданияНаОсновании.Добавить();
КомандаСоздатьНаОсновании.Менеджер = Метаданные.Документы.ПланОстатков.ПолноеИмя();
КомандаСоздатьНаОсновании.Представление = ОбщегоНазначенияУТ.ПредставлениеОбъекта(Метаданные.Документы.ПланОстатков);
КомандаСоздатьНаОсновании.РежимЗаписи = "Проводить";
КомандаСоздатьНаОсновании.ФункциональныеОпции = "ИспользоватьПланированиеОстатков";
Возврат КомандаСоздатьНаОсновании;
КонецЕсли;
Возврат Неопределено;
КонецФункции
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
Отчеты.СбалансированностьПлановУТ.ДобавитьКомандуСбалансированностьПланов(КомандыОтчетов);
КонецПроцедуры
Функция ПроверкаПередСменойСтатуса(ВыборкаПроверки, НовыйСтатус, ДополнительныеПараметры) Экспорт
Возврат Истина;
КонецФункции
Функция СформироватьЗапросПроверкиПриСменеСтатуса(МассивДокументов, НовыйСтатус, ДополнительныеПараметры) Экспорт
ЗначениеНовогоСтатуса = Перечисления.СтатусыПланов[НовыйСтатус];
ТекстЗапроса =
"ВЫБРАТЬ
| ТаблицаДокументов.Ссылка КАК Ссылка,
| ПРЕДСТАВЛЕНИЕ(ТаблицаДокументов.Ссылка) КАК Представление,
| ПРЕДСТАВЛЕНИЕ(ТаблицаДокументов.Статус) КАК ПредставлениеТекущегоСтатуса,
| ПРЕДСТАВЛЕНИЕ(&Статус) КАК ПредставлениеНовогоСтатуса,
| ВЫБОР
| КОГДА ТаблицаДокументов.Статус = &Статус
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК СтатусСовпадает,
| ТаблицаДокументов.Проведен КАК Проведен,
| ТаблицаДокументов.ПометкаУдаления КАК ПометкаУдаления,
| ИСТИНА КАК ЗаписьПроведением
|ИЗ
| Документ.ПланОстатков КАК ТаблицаДокументов
|ГДЕ
| ТаблицаДокументов.Ссылка В(&МассивДокументов)
|УПОРЯДОЧИТЬ ПО
| Дата
|";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("Статус", ЗначениеНовогоСтатуса);
Запрос.УстановитьПараметр("МассивДокументов", МассивДокументов);
Возврат Запрос;
КонецФункции
Процедура ДополнительныеПараметрыДляРасчетаПоФормуле(Параметры, ДопПараметры) Экспорт
ВидПлана = Параметры.ВидПланаРеквизиты;
Сценарий = Параметры.СценарийРеквизиты;
ПутьКРеквизиту = Параметры.ПутьКРеквизиту;
ЭтоПланПродаж = ВидПлана.ТипПлана = Перечисления.ТипыПланов.ПланОстатков;
СоздаватьРеквизитСОтбором = ВидПлана.ЗаполнятьСклад
ИЛИ (Сценарий.ПланированиеПоНазначениям И Не ВидПлана.ЗаполнятьНазначениеВТЧ);
ИспользоватьПланыОстатков = ПолучитьФункциональнуюОпцию("ИспользоватьПланированиеОстатков") И Сценарий.ИспользоватьВПланированииОстатков;
ЭтоПланПродаж = ВидПлана.ТипПлана = Перечисления.ТипыПланов.ПланПродаж;
ЭтоПланПродажПоКатегориям = ВидПлана.ТипПлана = Перечисления.ТипыПланов.ПланПродажПоКатегориям;
ЭтоПланЗакупок = ВидПлана.ТипПлана = Перечисления.ТипыПланов.ПланЗакупок;
ЭтоПланСборкиРазборки = ВидПлана.ТипПлана = Перечисления.ТипыПланов.ПланСборкиРазборки;
ЭтоПланПроизводства = ВидПлана.ТипПлана = Перечисления.ТипыПланов.ПланПроизводства;
ЭтоПланВнутреннихПотреблений = ВидПлана.ТипПлана = Перечисления.ТипыПланов.ПланВнутреннихПотреблений;
ЗаполнятьНазначениеВТЧ = ВидПлана.ЗаполнятьНазначениеВТЧ;
ПланированиеПоНазначениям = Сценарий.ПланированиеПоНазначениям;
ЭтоПланыРасхода = ЭтоПланПродаж
Или ЭтоПланПродажПоКатегориям
Или (ЭтоПланСборкиРазборки И Параметры.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РазборкаТоваров)
Или ЭтоПланВнутреннихПотреблений;
ЭтоПланыПрихода = Не ЭтоПланыРасхода;
#Область ПланыОстатков
ДопПараметр = Новый Структура();
ДопПараметр.Вставить("Имя", "ПланыОстатков");
ДопПараметр.Вставить("Тип", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
ДопПараметр.Вставить("Путь", ПутьКРеквизиту);
ДопПараметр.Вставить("Заголовок", НСтр("ru='План остатков'"));
ДопПараметр.Вставить("СоздаватьРеквизит", ИспользоватьПланыОстатков);
ДопПараметр.Вставить("УдалятьРеквизитыТаблицы", Истина);
ДопПараметр.Вставить("СоздаватьОперанд", ИспользоватьПланыОстатков);
ДопПараметр.Вставить("ЗаголовокОперанда", НСтр("ru='План остатков'"));
ДопПараметр.Вставить("Расшифровка", "Документ.ПланОстатков");
ДопПараметр.Вставить("ВходитВОперанд", "ДополнительныеОперандыПланы");
ДопПараметры.Вставить("ПланыОстатков", ДопПараметр);
#КонецОбласти
#Область ПланыОстатковСОтбором
ДопПараметр = Новый Структура();
ДопПараметр.Вставить("Имя", "ПланыОстатковСОтбором");
ДопПараметр.Вставить("Тип", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
ДопПараметр.Вставить("Путь", ПутьКРеквизиту);
ДопПараметр.Вставить("Заголовок", НСтр("ru='План остатков*'"));
ДопПараметр.Вставить("СоздаватьРеквизит", ИспользоватьПланыОстатков И СоздаватьРеквизитСОтбором);
ДопПараметр.Вставить("УдалятьРеквизитыТаблицы", Истина);
ДопПараметр.Вставить("СоздаватьОперанд", ИспользоватьПланыОстатков И СоздаватьРеквизитСОтбором);
ДопПараметр.Вставить("ЗаголовокОперанда", НСтр("ru='План остатков*'"));
ДопПараметр.Вставить("Расшифровка", "Документ.ПланОстатков");
ДопПараметр.Вставить("ВходитВОперанд", "ДополнительныеОперандыПланыСОтбором");
ДопПараметры.Вставить("ПланыОстатковСОтбором", ДопПараметр);
#КонецОбласти
#Область СвободныеОстатки
ДопПараметр = Новый Структура();
ДопПараметр.Вставить("Имя", "СвободныеОстатки");
ДопПараметр.Вставить("Тип", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
ДопПараметр.Вставить("Путь", ПутьКРеквизиту);
ДопПараметр.Вставить("Заголовок", НСтр("ru='Доступный остаток'"));
ДопПараметр.Вставить("СоздаватьРеквизит", Не ПланированиеПоНазначениям);
ДопПараметр.Вставить("УдалятьРеквизитыТаблицы", Истина);
ДопПараметр.Вставить("СоздаватьОперанд", Не ПланированиеПоНазначениям);
ДопПараметр.Вставить("ЗаголовокОперанда", НСтр("ru='Свободный остаток'"));
ДопПараметр.Вставить("ВходитВОперанд", "ДополнительныеОперандыФакты");
ДопПараметры.Вставить("СвободныеОстатки",ДопПараметр);
#КонецОбласти
#Область ФактическиеНачальныеОстатки
ДопПараметр = Новый Структура();
ДопПараметр.Вставить("Имя", "ФактическиеНачальныеОстатки");
ДопПараметр.Вставить("Тип", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
ДопПараметр.Вставить("Путь", ПутьКРеквизиту);
ДопПараметр.Вставить("Заголовок", ?(СоздаватьРеквизитСОтбором, НСтр("ru='Фактический начальный остаток*'"),
НСтр("ru='Фактический начальный остаток'")));
ДопПараметр.Вставить("СоздаватьРеквизит", Истина);
ДопПараметр.Вставить("УдалятьРеквизитыТаблицы", Истина);
ДопПараметр.Вставить("СоздаватьОперанд", Истина);
ДопПараметр.Вставить("ЗаголовокОперанда", ?(СоздаватьРеквизитСОтбором, НСтр("ru='Фактический начальный остаток*'"),
НСтр("ru='Фактический начальный остаток'")));
ДопПараметр.Вставить("ВходитВОперанд", "ДополнительныеОперандыФакты");
ДопПараметры.Вставить("ФактическиеНачальныеОстатки",ДопПараметр);
#КонецОбласти
#Область ПланируемыеНачальныеОстатки
ДопПараметр = Новый Структура();
ДопПараметр.Вставить("Имя", "ПланируемыеНачальныеОстатки");
ДопПараметр.Вставить("Тип", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
ДопПараметр.Вставить("Путь", ПутьКРеквизиту);
ДопПараметр.Вставить("Заголовок", НСтр("ru='Планируемый начальный остаток'"));
ДопПараметр.Вставить("СоздаватьРеквизит", ИспользоватьПланыОстатков);
ДопПараметр.Вставить("УдалятьРеквизитыТаблицы", Истина);
ДопПараметр.Вставить("СоздаватьОперанд", ИспользоватьПланыОстатков);
ДопПараметр.Вставить("ЗаголовокОперанда", НСтр("ru='Планируемый начальный остаток'"));
ДопПараметр.Вставить("ВходитВОперанд", "ОсновныеОперанды");
ДопПараметры.Вставить("ПланируемыеНачальныеОстатки",ДопПараметр);
#КонецОбласти
#Область ПланируемыеНачальныеОстаткиСОтбором
ДопПараметр = Новый Структура();
ДопПараметр.Вставить("Имя", "ПланируемыеНачальныеОстаткиСОтбором");
ДопПараметр.Вставить("Тип", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
ДопПараметр.Вставить("Путь", ПутьКРеквизиту);
ДопПараметр.Вставить("Заголовок", НСтр("ru='Планируемый начальный остаток*'"));
ДопПараметр.Вставить("СоздаватьРеквизит", ИспользоватьПланыОстатков И СоздаватьРеквизитСОтбором);
ДопПараметр.Вставить("УдалятьРеквизитыТаблицы", Истина);
ДопПараметр.Вставить("СоздаватьОперанд", ИспользоватьПланыОстатков И СоздаватьРеквизитСОтбором);
ДопПараметр.Вставить("ЗаголовокОперанда", НСтр("ru='Планируемый начальный остаток*'"));
ДопПараметр.Вставить("ВходитВОперанд", "ОсновныеОперандыСОтбором");
ДопПараметры.Вставить("ПланируемыеНачальныеОстаткиСОтбором",ДопПараметр);
#КонецОбласти
#Область ПланируемыеКонечныеОстатки
ДопПараметр = Новый Структура();
ДопПараметр.Вставить("Имя", "ПланируемыеКонечныеОстатки");
ДопПараметр.Вставить("Тип", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
ДопПараметр.Вставить("Путь", ПутьКРеквизиту);
ДопПараметр.Вставить("Заголовок", НСтр("ru='Планируемый конечный остаток'"));
ДопПараметр.Вставить("СоздаватьРеквизит", ИспользоватьПланыОстатков И ЭтоПланыРасхода);
ДопПараметр.Вставить("УдалятьРеквизитыТаблицы", Истина);
ДопПараметр.Вставить("СоздаватьОперанд", ИспользоватьПланыОстатков И ЭтоПланыРасхода);
ДопПараметр.Вставить("ЗаголовокОперанда", НСтр("ru='Планируемый конечный остаток'"));
ДопПараметр.Вставить("ВходитВОперанд", "ОсновныеОперанды");
ДопПараметры.Вставить("ПланируемыеКонечныеОстатки",ДопПараметр);
#КонецОбласти
#Область ПланируемыеКонечныеОстаткиСОтбором
ДопПараметр = Новый Структура();
ДопПараметр.Вставить("Имя", "ПланируемыеКонечныеОстаткиСОтбором");
ДопПараметр.Вставить("Тип", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
ДопПараметр.Вставить("Путь", ПутьКРеквизиту);
ДопПараметр.Вставить("Заголовок", НСтр("ru='Планируемый конечный остаток*'"));
ДопПараметр.Вставить("СоздаватьРеквизит", ИспользоватьПланыОстатков И СоздаватьРеквизитСОтбором);
ДопПараметр.Вставить("УдалятьРеквизитыТаблицы", Истина);
ДопПараметр.Вставить("СоздаватьОперанд", ИспользоватьПланыОстатков И СоздаватьРеквизитСОтбором И ЭтоПланыРасхода);
ДопПараметр.Вставить("ЗаголовокОперанда", НСтр("ru='Планируемый конечный остаток*'"));
ДопПараметр.Вставить("ВходитВОперанд", "ОсновныеОперандыСОтбором");
ДопПараметры.Вставить("ПланируемыеКонечныеОстаткиСОтбором",ДопПараметр);
#КонецОбласти
#Область ПланируемыйКонечныйДефицит
ДопПараметр = Новый Структура();
ДопПараметр.Вставить("Имя", "ПланируемыйКонечныйДефицит");
ДопПараметр.Вставить("Тип", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
ДопПараметр.Вставить("Путь", ПутьКРеквизиту);
ДопПараметр.Вставить("Заголовок", НСтр("ru='Планируемый конечный дефицит'"));
ДопПараметр.Вставить("СоздаватьРеквизит", ИспользоватьПланыОстатков И ЭтоПланыПрихода);
ДопПараметр.Вставить("УдалятьРеквизитыТаблицы", Истина);
ДопПараметр.Вставить("СоздаватьОперанд", ИспользоватьПланыОстатков И ЭтоПланыПрихода);
ДопПараметр.Вставить("ЗаголовокОперанда", НСтр("ru='Планируемый конечный дефицит'"));
ДопПараметр.Вставить("ВходитВОперанд", "ОсновныеОперанды");
ДопПараметры.Вставить("ПланируемыйКонечныйДефицит",ДопПараметр);
#КонецОбласти
#Область ПланируемыйКонечныйДефицитСОтбором
ДопПараметр = Новый Структура();
ДопПараметр.Вставить("Имя", "ПланируемыйКонечныйДефицитСОтбором");
ДопПараметр.Вставить("Тип", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
ДопПараметр.Вставить("Путь", ПутьКРеквизиту);
ДопПараметр.Вставить("Заголовок", НСтр("ru='Планируемый конечный дефицит*'"));
ДопПараметр.Вставить("СоздаватьРеквизит", ИспользоватьПланыОстатков И СоздаватьРеквизитСОтбором И ЭтоПланыПрихода);
ДопПараметр.Вставить("УдалятьРеквизитыТаблицы", Истина);
ДопПараметр.Вставить("СоздаватьОперанд", ИспользоватьПланыОстатков И СоздаватьРеквизитСОтбором И ЭтоПланыПрихода);
ДопПараметр.Вставить("ЗаголовокОперанда", НСтр("ru='Планируемый конечный дефицит*'"));
ДопПараметр.Вставить("ВходитВОперанд", "ОсновныеОперандыСОтбором");
ДопПараметры.Вставить("ПланируемыйКонечныйДефицитСОтбором",ДопПараметр);
#КонецОбласти
#Область НакопленныйПланируемыйКонечныйДефицит
ДопПараметр = Новый Структура();
ДопПараметр.Вставить("Имя", "НакопленныйПланируемыйКонечныйДефицит");
ДопПараметр.Вставить("Тип", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
ДопПараметр.Вставить("Путь", ПутьКРеквизиту);
ДопПараметр.Вставить("Заголовок", НСтр("ru='Накопленный планируемый конечный дефицит'"));
ДопПараметр.Вставить("СоздаватьРеквизит", ИспользоватьПланыОстатков);
ДопПараметр.Вставить("УдалятьРеквизитыТаблицы", Истина);
ДопПараметр.Вставить("СоздаватьОперанд", Ложь);
ДопПараметр.Вставить("ЗаголовокОперанда", НСтр("ru='Накопленный планируемый конечный дефицит'"));
ДопПараметр.Вставить("ВходитВОперанд", "ОсновныеОперанды");
ДопПараметры.Вставить("НакопленныйПланируемыйКонечныйДефицит",ДопПараметр);
#КонецОбласти
#Область НакопленныйПланируемыйКонечныйДефицитСОтбором
ДопПараметр = Новый Структура();
ДопПараметр.Вставить("Имя", "НакопленныйПланируемыйКонечныйДефицитСОтбором");
ДопПараметр.Вставить("Тип", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
ДопПараметр.Вставить("Путь", ПутьКРеквизиту);
ДопПараметр.Вставить("Заголовок", НСтр("ru='Накопленный планируемый конечный дефицит*'"));
ДопПараметр.Вставить("СоздаватьРеквизит", ИспользоватьПланыОстатков И СоздаватьРеквизитСОтбором);
ДопПараметр.Вставить("УдалятьРеквизитыТаблицы", Истина);
ДопПараметр.Вставить("СоздаватьОперанд", Ложь);
ДопПараметр.Вставить("ЗаголовокОперанда", НСтр("ru='Накопленный планируемый конечный дефицит*'"));
ДопПараметр.Вставить("ВходитВОперанд", "ОсновныеОперандыСОтбором");
ДопПараметры.Вставить("НакопленныйПланируемыйКонечныйДефицитСОтбором",ДопПараметр);
#КонецОбласти
КонецПроцедуры
Функция МакетыОперандовПлана(Макеты = Неопределено) Экспорт
Если Макеты = Неопределено Тогда
Макеты = Новый Соответствие;
КонецЕсли;
Макеты.Вставить("ПланыОстатков", ПолучитьМакет("СКД_ПланыОстатков"));
Макеты.Вставить("ПланыОстатковСОтбором", ПолучитьМакет("СКД_ПланыОстатковСОтбором"));
Макеты.Вставить("ПланируемыеНачальныеОстатки", ПолучитьМакет("СКД_ПланируемыеНачальныеОстатки"));
Макеты.Вставить("ПланируемыеНачальныеОстаткиСОтбором", ПолучитьМакет("СКД_ПланируемыеНачальныеОстаткиСОтбором"));
Макеты.Вставить("СвободныеОстатки", ПолучитьМакет("СКД_СвободныеОстаткиПроизводительныйРежим"));
Макеты.Вставить("ФактическиеНачальныеОстатки", ПолучитьМакет("СКД_ФактическиеНачальныеОстатки"));
Возврат Макеты;
КонецФункции
Процедура ЗаполнитьДокумент(Знач Параметры, Знач АдресХранилища, Знач АдресХранилищаДополнительный = "") Экспорт
Настройки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(Параметры.КлючОбщихНастроек,
"НастройкиФоновогоЗадания_"+Параметры.УникальныйИдентификатор);
Если ТипЗнч(Настройки) <> Тип("Структура") Тогда
Возврат;
КонецЕсли;
Параметры.Вставить("Периоды", Настройки.Периоды);
Если Параметры.Свойство("ЗаполнятьПоФормуле") Тогда
Параметры.Вставить("ЗаполняемаяТЧ", Настройки.ЗаполняемаяТЧ);
ЗаполнитьДокументПоФормуле(Параметры, АдресХранилища, АдресХранилищаДополнительный);
ИначеЕсли Параметры.Свойство("ЗаполнятьПоПравилу") Тогда
Параметры.Вставить("ПравилоЗаполнения", Настройки.ПравилоЗаполнения);
Параметры.Вставить("ПользовательскиеНастройки", Настройки.ПользовательскиеНастройки);
Параметры.Вставить("ЗаполняемаяТЧ", Настройки.ЗаполняемаяТЧ);
ЗаполнитьПоПравилуЗаполнения(Параметры, АдресХранилища);
ИначеЕсли Параметры.Свойство("ЗаполнитьДляЗамещения") Тогда
Параметры.Вставить("ЗаполняемаяТЧ", Настройки.ЗаполняемаяТЧ);
ЗаполнитьДокументДляЗамещения(Параметры, АдресХранилища);
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
ОбщегоНазначения.ХранилищеОбщихНастроекУдалить(Параметры.КлючОбщихНастроек,
"НастройкиФоновогоЗадания_"+Параметры.УникальныйИдентификатор, Пользователи.ТекущийПользователь());
КонецПроцедуры
Процедура ЗаполнитьДокументПоФормуле(Знач Параметры, Знач АдресХранилища, Знач АдресХранилищаДополнительный) Экспорт
Замер = ОценкаПроизводительности.НачатьЗамерДлительнойОперации("Документ.ПланОстатков.МодульМенеджера.ЗаполнитьДокументПоФормуле");
Если Не Параметры.Свойство("ЗаполнятьПоФормуле") Тогда
Возврат;
КонецЕсли;
ИмяКолонкиПериода = "ДатаОстатка";
Периоды = Параметры.Периоды;
Планирование.ПодготовитьТаблицуПериодовПередЗаполнением(Параметры);
Планирование.ЗаполнитьТаблицуПериодов(Периоды, Параметры.Периодичность, Параметры.НачалоПериодаСмещения, Параметры.КонецПериодаСмещения,,, Параметры.НачалоАктивныхПериодов);
НайденныеСтрокиПериодов = Периоды.НайтиСтроки(Новый Структура("Активная", Истина));
ВсегоПериодов = НайденныеСтрокиПериодов.Количество();
Если Параметры.КроссТаблица И ВсегоПериодов = 0 Тогда
ПоместитьВоВременноеХранилище(Новый ТаблицаЗначений, АдресХранилища);
ПоместитьВоВременноеХранилище(Неопределено, АдресХранилищаДополнительный);
Возврат;
КонецЕсли;
Параметры.Вставить("Периоды", Периоды);
ЗаполняемаяТЧ = Параметры.ЗаполняемаяТЧ;
КолонкаПериода = ЗаполняемаяТЧ.Колонки[ИмяКолонкиПериода];
КолонкаПериода.Имя = "ПериодСостава";
Результат = Планирование.ЗаполнитьПоФормуле(Параметры);
Если Результат.Колонки.Найти("ПериодСостава") = Неопределено Тогда
Результат.Колонки.Добавить("ПериодСостава", ОбщегоНазначенияУТ.ПолучитьОписаниеТиповДаты(ЧастиДаты.Дата))
КонецЕсли;
Результат.Колонки["ПериодСостава"].Имя = ИмяКолонкиПериода;
ПоместитьВоВременноеХранилище(Результат, АдресХранилища);
Если Параметры.НачалоАктивныхПериодов > Параметры.НачалоПериодаСмещения Тогда
ПоместитьВоВременноеХранилище(Периоды, АдресХранилищаДополнительный);
Иначе
ПоместитьВоВременноеХранилище(Неопределено, АдресХранилищаДополнительный);
КонецЕсли;
КоличествоОбработанных = Периоды.Количество();
ОценкаПроизводительности.ЗакончитьЗамерДлительнойОперации(Замер, КоличествоОбработанных);
КонецПроцедуры
Процедура ЗаполнитьПоПравилуЗаполнения(Знач Параметры, Знач АдресХранилища) Экспорт
Если Не Параметры.Свойство("ЗаполнятьПоПравилу") Тогда
Возврат;
КонецЕсли;
ИмяКолонкиПериода = "ДатаОстатка";
Периоды = Параметры.Периоды;
НайденныеСтрокиПериодов = Периоды.НайтиСтроки(Новый Структура("Активная", Истина));
ВсегоПериодов = НайденныеСтрокиПериодов.Количество();
Если Параметры.КроссТаблица И ВсегоПериодов = 0 Тогда
Возврат;
КонецЕсли;
Коэффициенты = Новый Массив;
Для Индекс = 1 По ВсегоПериодов Цикл
Коэффициенты.Добавить(1);
КонецЦикла;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ПараметрыДанных", Планирование.ПолучитьПараметрыПлана(Параметры));
Если Параметры.Свойство("Отбор") Тогда
ДополнительныеПараметры.Вставить("Отбор", Параметры.Отбор);
КонецЕсли;
Если ЗначениеЗаполнено(Параметры.ИзменитьРезультатНа) Тогда
ДополнительныеПараметры.ПараметрыДанных.Вставить("Коэффициент", (100 + Параметры.ИзменитьРезультатНа) / 100);
КонецЕсли;
Если Параметры.Свойство("ТочностьОкругления") Тогда
ДополнительныеПараметры.ПараметрыДанных.Вставить("ТочностьОкругления", Параметры.ТочностьОкругления);
КонецЕсли;
ПравилоЗаполнения = Параметры.ПравилоЗаполнения;
ПользовательскиеНастройки = Параметры.ПользовательскиеНастройки;
Результат = Планирование.ВыбратьДанныеПоПравилам(
Перечисления.ТипыПланов.ПланОстатков,
ПравилоЗаполнения,
ПользовательскиеНастройки,
ДополнительныеПараметры);
ЗаполняемаяТЧ = Параметры.ЗаполняемаяТЧ;
Если Результат <> Неопределено Тогда
РазрядностьОкругления = Параметры.ТочностьОкругления + 3;
Для каждого СтрокаРезультата Из Результат Цикл
Если Параметры.ТочностьОкругления <> 0 Тогда
ИмяФункции = НСтр("ru = 'Окр(%1; %2)'");
СтрокаРезультата.Расшифровка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ИмяФункции, СтрокаРезультата.Расшифровка, Pow(10, -РазрядностьОкругления));
СтрокаРезультата.ЧисловоеПредставление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ИмяФункции, СтрокаРезультата.ЧисловоеПредставление, Pow(10, -РазрядностьОкругления));
КонецЕсли;
Если СтрокаРезультата.Количество = null Тогда
Продолжить;
КонецЕсли;
Если Цел(СтрокаРезультата.Количество * Pow(10, РазрядностьОкругления)) = 0 Тогда
Продолжить;
КонецЕсли;
Количество = Окр(СтрокаРезультата.Количество, РазрядностьОкругления);
СтрокаРезультата.Расшифровка = СтрокаРезультата.Расшифровка + " = " + СтрокаРезультата.ЧисловоеПредставление;
Если СтрокаРезультата.ЧисловоеПредставление <> Строка(Количество) Тогда
СтрокаРезультата.Расшифровка = СтрокаРезультата.Расшифровка + " = " + Строка(Количество);
КонецЕсли;
Если Параметры.КроссТаблица Тогда
Если ЗначениеЗаполнено(СтрокаРезультата.Период)
И СтрокаРезультата.Период >= Параметры.НачалоПериода
И СтрокаРезультата.Период <= Параметры.ОкончаниеПериода Тогда
НоваяСтрока = ЗаполняемаяТЧ.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаРезультата);
НоваяСтрока.Количество = Количество;
НоваяСтрока.КоличествоУпаковок = НоваяСтрока.Количество;
НоваяСтрока[ИмяКолонкиПериода] = СтрокаРезультата.Период;
Продолжить;
ИначеЕсли ЗначениеЗаполнено(СтрокаРезультата.Период) Тогда
Продолжить;
КонецЕсли;
Если СтрокаРезультата.Количество < 0 Тогда
ЗнакКоличества = -1;
Иначе
ЗнакКоличества = 1;
КонецЕсли;
РаспределениеКоличества = Планирование.РаспределитьСуммуПропорциональноКоэффициентам(ЗнакКоличества * СтрокаРезультата.Количество, Коэффициенты, РазрядностьОкругления);
Если РаспределениеКоличества = Неопределено Тогда
Продолжить;
КонецЕсли;
Если РаспределениеКоличества[0] < 0 Тогда
РаспределениеКоличества[0] = 0;
КонецЕсли;
Индекс = РаспределениеКоличества.ВГраница();
Пока Индекс >= 0 Цикл
Количество = РаспределениеКоличества[Индекс];
ДатаПериода = НайденныеСтрокиПериодов[НайденныеСтрокиПериодов.ВГраница() - Индекс].ДатаНачала;
Индекс = Индекс - 1;
Если Количество = 0 Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = ЗаполняемаяТЧ.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаРезультата);
НоваяСтрока.Количество = ЗнакКоличества * Количество;
НоваяСтрока.КоличествоУпаковок = НоваяСтрока.Количество;
НоваяСтрока[ИмяКолонкиПериода] = ДатаПериода;
КонецЦикла;
Иначе
НоваяСтрока = ЗаполняемаяТЧ.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаРезультата);
НоваяСтрока.Количество = Количество;
НоваяСтрока.КоличествоУпаковок = НоваяСтрока.Количество;
НоваяСтрока[ИмяКолонкиПериода] = СтрокаРезультата.Период;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ПоместитьВоВременноеХранилище(ЗаполняемаяТЧ, АдресХранилища);
КонецПроцедуры
Процедура ЗаполнитьДокументДляЗамещения(Знач Параметры, Знач АдресХранилища) Экспорт
Если Не Параметры.Свойство("ЗаполнитьДляЗамещения") Тогда
Возврат;
КонецЕсли;
ИмяКолонкиПериода = "ДатаОстатка";
Периоды = Параметры.Периоды;
НайденныеСтрокиПериодов = Периоды.НайтиСтроки(Новый Структура("Активная", Истина));
ВсегоПериодов = НайденныеСтрокиПериодов.Количество();
Если Параметры.КроссТаблица И ВсегоПериодов = 0 Тогда
ПоместитьВоВременноеХранилище(Новый ТаблицаЗначений, АдресХранилища);
Возврат;
КонецЕсли;
Параметры.Вставить("Периоды", Периоды);
ЗаполняемаяТЧ = Параметры.ЗаполняемаяТЧ;
КолонкаПериода = ЗаполняемаяТЧ.Колонки[ИмяКолонкиПериода];
КолонкаПериода.Имя = "ПериодСостава";
Результат = Планирование.ЗаполнитьДляЗамещения(Параметры);
Если Результат.Колонки.Найти("ПериодСостава") = Неопределено Тогда
Результат.Колонки.Добавить("ПериодСостава", ОбщегоНазначенияУТ.ПолучитьОписаниеТиповДаты(ЧастиДаты.Дата))
КонецЕсли;
Результат.Колонки["ПериодСостава"].Имя = ИмяКолонкиПериода;
ПоместитьВоВременноеХранилище(Результат, АдресХранилища);
КонецПроцедуры
#Область ДляВызоваИзДругихПодсистем
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
Ограничение.Текст =
"РазрешитьЧтениеИзменение
|ГДЕ
| ЗначениеРазрешено(Склад)
| И ЗначениеРазрешено(Сценарий)
| И ЗначениеРазрешено(ВидПлана)";
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область Проведение
Функция ДополнительныеИсточникиДанныхДляДвижений(ИмяРегистра) Экспорт
ИсточникиДанных = Новый Соответствие;
Возврат ИсточникиДанных;
КонецФункции
Процедура ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка)
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеДокумента.Ссылка КАК Ссылка,
| ДанныеДокумента.Дата КАК Дата,
| ДанныеДокумента.Статус КАК Статус,
| ДанныеДокумента.Сценарий КАК Сценарий,
| ДанныеДокумента.ВидПлана КАК ВидПлана,
| ДанныеДокумента.Замещающий КАК Замещающий,
| ДанныеДокумента.Склад КАК Склад,
| ДанныеДокумента.НачалоПериода КАК НачалоПериода,
| ДанныеДокумента.ОкончаниеПериода КАК ОкончаниеПериода,
| ДанныеДокумента.Назначение КАК Назначение,
| ДанныеДокумента.ВидПлана.ЗаполнятьНазначениеВТЧ КАК ЗаполнятьНазначениеВТЧ
|ИЗ
| Документ.ПланОстатков КАК ДанныеДокумента
|ГДЕ
| ДанныеДокумента.Ссылка = &Ссылка
|";
РезультатыЗапроса = Запрос.ВыполнитьПакет();
Реквизиты = РезультатыЗапроса[0].Выбрать();
Реквизиты.Следующий();
Запрос.УстановитьПараметр("НачалоПериода", Реквизиты.НачалоПериода);
Запрос.УстановитьПараметр("ОкончаниеПериода", Реквизиты.ОкончаниеПериода);
Запрос.УстановитьПараметр("Сценарий", Реквизиты.Сценарий);
Запрос.УстановитьПараметр("ВидПлана", Реквизиты.ВидПлана);
Запрос.УстановитьПараметр("Замещающий", Реквизиты.Замещающий);
Запрос.УстановитьПараметр("Статус", Реквизиты.Статус);
Запрос.УстановитьПараметр("Назначение", Реквизиты.Назначение);
Запрос.УстановитьПараметр("ЗаполнятьНазначениеВТЧ", Реквизиты.ЗаполнятьНазначениеВТЧ);
КонецПроцедуры
Функция ТекстЗапросаТаблицаПланыОстатков(Запрос, ТекстыЗапроса, Регистры)
ИмяРегистра = "ПланыОстатков";
Если Не ПроведениеДокументов.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
Возврат "";
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| ТаблицаТовары.Ссылка КАК ПланОстатков,
| &Статус КАК Статус,
| &НачалоПериода КАК Период,
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ВЫБОР
| КОГДА СпрНоменклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Услуга)
| ТОГДА ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| ИНАЧЕ ТаблицаТовары.Назначение
| КОНЕЦ КАК Назначение,
| ВЫБОР
| КОГДА СпрНоменклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Услуга)
| ИЛИ СпрНоменклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа)
| ТОГДА ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
| ИНАЧЕ ТаблицаТовары.Склад
| КОНЕЦ КАК Склад,
| &Сценарий КАК Сценарий,
| &ВидПлана КАК ВидПлана,
| ВЫБОР
| КОГДА ТаблицаТовары.Замещен
| ТОГДА 0
| ИНАЧЕ ТаблицаТовары.Количество
| КОНЕЦ КАК Количество,
| ВЫБОР
| КОГДА &Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыПланов.Утвержден)
| ТОГДА ТаблицаТовары.Количество
| ИНАЧЕ 0
| КОНЕЦ КАК КЗаказу
|ИЗ
| Документ.ПланОстатков.Товары КАК ТаблицаТовары
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
| ПО ТаблицаТовары.Номенклатура = СпрНоменклатура.Ссылка
|ГДЕ
| ТаблицаТовары.Ссылка = &Ссылка
| И НЕ ТаблицаТовары.Отменено
| И &Статус <> ЗНАЧЕНИЕ(Перечисление.СтатусыПланов.Отменен)
| И (НЕ ТаблицаТовары.Замещен
| И &Статус <> ЗНАЧЕНИЕ(Перечисление.СтатусыПланов.Утвержден)
| ИЛИ НЕ ТаблицаТовары.ЗамещенКЗаказу
| И &Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыПланов.Утвержден))
|";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Функция АдаптированныйТекстЗапросаДвиженийПоРегистру(ИмяРегистра) Экспорт
Запрос = Новый Запрос;
ТекстыЗапроса = Новый СписокЗначений;
ПолноеИмяДокумента = "Документ.ПланОстатков";
ЗначенияПараметров = Новый Структура;
ПереопределениеРасчетаПараметров = Новый Структура;
Если ИмяРегистра = "ПланыОстатков" Тогда
ТекстЗапроса = ТекстЗапросаТаблицаПланыОстатков(Запрос, ТекстыЗапроса, ИмяРегистра);
СинонимТаблицыДокумента = "ТаблицаТовары";
Иначе
ТекстИсключения = НСтр("ru = 'В документе %ПолноеИмяДокумента% не реализована адаптация текста запроса формирования движений по регистру %ИмяРегистра%.'");
ТекстИсключения = СтрЗаменить(ТекстИсключения, "%ПолноеИмяДокумента%", ПолноеИмяДокумента);
ТекстИсключения = СтрЗаменить(ТекстИсключения, "%ИмяРегистра%", ИмяРегистра);
ВызватьИсключение ТекстИсключения;
КонецЕсли;
Результат = ОбновлениеИнформационнойБазыУТ.РезультатАдаптацииЗапроса();
Результат.ТекстЗапроса = ОбновлениеИнформационнойБазыУТ.АдаптироватьЗапросМеханизмаПроведения(ТекстЗапроса,
ПолноеИмяДокумента,
СинонимТаблицыДокумента,
ПереопределениеРасчетаПараметров);
Возврат Результат;
КонецФункции
Функция ЗапросЗамещенныеИЗамещающиеПланы(Параметры) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПланОстатковЗамещающий.Ссылка КАК ЗамещаемыйПлан,
| ВЫБОР
| КОГДА &НачалоПериода > ПланОстатковЗамещающий.НачалоПериода
| ТОГДА &НачалоПериода
| ИНАЧЕ ПланОстатковЗамещающий.НачалоПериода
| КОНЕЦ КАК НачалоПериода,
| ВЫБОР
| КОГДА &ОкончаниеПериода < ПланОстатковЗамещающий.ОкончаниеПериода
| ТОГДА &ОкончаниеПериода
| ИНАЧЕ ПланОстатковЗамещающий.ОкончаниеПериода
| КОНЕЦ КАК ОкончаниеПериода,
| ПланОстатковЗамещающий.Статус КАК Статус
|ИЗ
| Документ.ПланОстатков КАК ПланОстатковЗамещающий
|ГДЕ
| ПланОстатковЗамещающий.ОкончаниеПериода >= &НачалоПериода
| И ПланОстатковЗамещающий.НачалоПериода <= &ОкончаниеПериода
| И ПланОстатковЗамещающий.Ссылка <> &Ссылка
| И ПланОстатковЗамещающий.Проведен
| И ПланОстатковЗамещающий.ВидПлана = &ВидПлана
| И (ПланОстатковЗамещающий.Статус.Порядок >= &СтатусИндекс
| ИЛИ ПланОстатковЗамещающий.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыПланов.НаУтверждении)
| И &Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыПланов.Утвержден))
| И &Статус <> ЗНАЧЕНИЕ(Перечисление.СтатусыПланов.Отменен)
| И ПланОстатковЗамещающий.Дата > &Дата
| И ПланОстатковЗамещающий.Склад = &Склад
| И ПланОстатковЗамещающий.Назначение = &Назначение
|
|УПОРЯДОЧИТЬ ПО
| НачалоПериода,
| Статус
|;
|
|
|ВЫБРАТЬ
| ПланОстатковЗамещенный.Ссылка КАК ЗамещенныйПлан,
| ВЫБОР
| КОГДА &НачалоПериода > ПланОстатковЗамещенный.НачалоПериода
| ТОГДА &НачалоПериода
| ИНАЧЕ ПланОстатковЗамещенный.НачалоПериода
| КОНЕЦ КАК НачалоПериода,
| ВЫБОР
| КОГДА &ОкончаниеПериода < ПланОстатковЗамещенный.ОкончаниеПериода
| ТОГДА &ОкончаниеПериода
| ИНАЧЕ ПланОстатковЗамещенный.ОкончаниеПериода
| КОНЕЦ КАК ОкончаниеПериода,
| ПланОстатковЗамещенный.Статус КАК Статус
|ИЗ
| Документ.ПланОстатков КАК ПланОстатковЗамещенный
|ГДЕ
| ПланОстатковЗамещенный.ОкончаниеПериода >= &НачалоПериода
| И ПланОстатковЗамещенный.НачалоПериода <= &ОкончаниеПериода
| И ПланОстатковЗамещенный.Ссылка <> &Ссылка
| И ПланОстатковЗамещенный.Проведен
| И ПланОстатковЗамещенный.ВидПлана = &ВидПлана
| И (ПланОстатковЗамещенный.Статус.Порядок <= &СтатусИндекс
| ИЛИ ПланОстатковЗамещенный.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыПланов.Утвержден)
| И &Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыПланов.НаУтверждении))
| И ПланОстатковЗамещенный.Статус <> ЗНАЧЕНИЕ(Перечисление.СтатусыПланов.Отменен)
| И ПланОстатковЗамещенный.Дата < &Дата
| И ПланОстатковЗамещенный.Склад = &Склад
| И ПланОстатковЗамещенный.Назначение = &Назначение
|
|УПОРЯДОЧИТЬ ПО
| НачалоПериода,
| Статус";
Запрос.УстановитьПараметр("Ссылка", Параметры.Ссылка);
Запрос.УстановитьПараметр("ВидПлана", Параметры.ВидПлана);
Запрос.УстановитьПараметр("Статус", Параметры.Статус);
Запрос.УстановитьПараметр("СтатусИндекс", Перечисления.СтатусыПланов.Индекс(Параметры.Статус));
Запрос.УстановитьПараметр("Дата", Параметры.Дата);
Запрос.УстановитьПараметр("Склад", Параметры.Склад);
Запрос.УстановитьПараметр("Назначение", Параметры.Назначение);
Запрос.УстановитьПараметр("НачалоПериода", Параметры.НачалоПериода);
Запрос.УстановитьПараметр("ОкончаниеПериода", Параметры.ОкончаниеПериода);
Запрос.УстановитьПараметр("Периодичность", Параметры.Периодичность);
Возврат Запрос;
КонецФункции
Функция ЗапросЗамещения(Параметры) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПланыОстатковОбороты.Период КАК ПериодСостава,
| ПланыОстатковОбороты.Сценарий,
| ПланыОстатковОбороты.Статус,
| ПланыОстатковОбороты.Номенклатура,
| ПланыОстатковОбороты.Характеристика,
| ПланыОстатковОбороты.Назначение,
| ПланыОстатковОбороты.Склад,
| ПланыОстатковОбороты.Назначение,
| ПланыОстатковОбороты.КоличествоОборот КАК КоличествоУпаковок
|ИЗ
| РегистрНакопления.ПланыОстатков.Обороты(
| &НачалоПериода,
| &КонецПериода,
| Запись,
| Сценарий = &Сценарий
| И ВидПлана = &ВидПлана
| И &ТекстЗапросаОтборСклад
| И (&ЗаполнятьНазначениеВТЧ ИЛИ Назначение = &Назначение)
| И Статус В (&Статусы)) КАК ПланыОстатковОбороты";
Запрос.УстановитьПараметр("КонецПериода", Параметры.КонецПериодаСмещения);
Запрос.УстановитьПараметр("НачалоПериода", Параметры.НачалоПериодаСмещения);
Запрос.УстановитьПараметр("Склад", Параметры.Склад);
Запрос.УстановитьПараметр("Статусы", Параметры.Статусы);
Запрос.УстановитьПараметр("Сценарий", Параметры.Сценарий);
Запрос.УстановитьПараметр("ВидПлана", Параметры.ВидПлана);
Запрос.УстановитьПараметр("ЗаполнятьНазначениеВТЧ", Параметры.ЗаполнятьНазначениеВТЧ);
Запрос.УстановитьПараметр("Назначение", Параметры.Назначение);
Запрос.Текст = СтрЗаменить(Запрос.Текст,
"&ТекстЗапросаОтборСклад",
?(ЗначениеЗаполнено(Параметры.Склад),"Склад = &Склад","Истина"));
Возврат Запрос;
КонецФункции
Функция МакетФормыВыбораНазначений() Экспорт
МакетФормы = Справочники.Назначения.МакетФормыВыбораНазначений();
ШаблонНазначения = Справочники.Назначения.ДобавитьШаблонНазначений(МакетФормы);
ОписаниеКолонок = Справочники.Назначения.ДобавитьОписаниеКолонок(МакетФормы, "ОбеспечениеЗаказов", Истина, "Объект.Товары.Назначение", "ОбеспечениеЗаказовСкладВШапке");
ОписаниеКолонок.Колонки.НайтиПоЗначению("Потребность").Пометка = Истина;
ОписаниеКолонок.УсловиеИспользования = "Объект.ВидПлана.ЗаполнятьСклад И Объект.Товары.Номенклатура.ТипНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа)";
ОписаниеКолонок.ПутиКДанным.Номенклатура = "Объект.Товары.Номенклатура";
ОписаниеКолонок.ПутиКДанным.Характеристика = "Объект.Товары.Характеристика";
ОписаниеКолонок.ПутиКДанным.Склад = "Объект.Склад";
ОписаниеКолонок = Справочники.Назначения.ДобавитьОписаниеКолонок(МакетФормы, "ОбеспечениеЗаказов", Истина, "Объект.Товары.Назначение", "ОбеспечениеЗаказовСкладВТЧ");
ОписаниеКолонок.Колонки.НайтиПоЗначению("Потребность").Пометка = Истина;
ОписаниеКолонок.УсловиеИспользования = "Объект.ВидПлана.ЗаполнятьСкладВТЧ И Объект.Товары.Номенклатура.ТипНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа)";
ОписаниеКолонок.ПутиКДанным.Номенклатура = "Объект.Товары.Номенклатура";
ОписаниеКолонок.ПутиКДанным.Характеристика = "Объект.Товары.Характеристика";
ОписаниеКолонок.ПутиКДанным.Склад = "Объект.Товары.Склад";
ОписаниеКолонок = Справочники.Назначения.ДобавитьОписаниеКолонок(МакетФормы, "ОбеспечениеЗаказовВсеСклады", Истина, "Объект.Товары.Назначение", "ОбеспечениеЗаказовВсеСклады");
ОписаниеКолонок.Колонки.НайтиПоЗначению("Потребность").Пометка = Истина;
ОписаниеКолонок.УсловиеИспользования = "Объект.ВидПлана.ЗаполнятьСклад = ЛОЖЬ И Объект.ВидПлана.ЗаполнятьСкладВТЧ = ЛОЖЬ И Объект.Товары.Номенклатура.ТипНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа)";
ОписаниеКолонок.ПутиКДанным.Номенклатура = "Объект.Товары.Номенклатура";
ОписаниеКолонок.ПутиКДанным.Характеристика = "Объект.Товары.Характеристика";
ОписаниеКолонок = Справочники.Назначения.ДобавитьОписаниеКолонок(МакетФормы, "ОбеспечениеЗаказов", Истина, "Объект.ТоварыПоПериодам.Назначение", "ОбеспечениеЗаказовПоПериодамСкладВШапке");
ОписаниеКолонок.Колонки.НайтиПоЗначению("Потребность").Пометка = Истина;
ОписаниеКолонок.УсловиеИспользования = "Объект.ВидПлана.ЗаполнятьСклад И Объект.ТоварыПоПериодам.Номенклатура.ТипНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа)";
ОписаниеКолонок.ПутиКДанным.Номенклатура = "Объект.ТоварыПоПериодам.Номенклатура";
ОписаниеКолонок.ПутиКДанным.Характеристика = "Объект.ТоварыПоПериодам.Характеристика";
ОписаниеКолонок.ПутиКДанным.Склад = "Объект.Склад";
ОписаниеКолонок = Справочники.Назначения.ДобавитьОписаниеКолонок(МакетФормы, "ОбеспечениеЗаказов", Истина, "Объект.ТоварыПоПериодам.Назначение", "ОбеспечениеЗаказовПоПериодамСкладВТЧ");
ОписаниеКолонок.Колонки.НайтиПоЗначению("Потребность").Пометка = Истина;
ОписаниеКолонок.УсловиеИспользования = "Объект.ВидПлана.ЗаполнятьСкладВТЧ И Объект.ТоварыПоПериодам.Номенклатура.ТипНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа)";
ОписаниеКолонок.ПутиКДанным.Номенклатура = "Объект.ТоварыПоПериодам.Номенклатура";
ОписаниеКолонок.ПутиКДанным.Характеристика = "Объект.ТоварыПоПериодам.Характеристика";
ОписаниеКолонок.ПутиКДанным.Склад = "Объект.ТоварыПоПериодам.Склад";
ОписаниеКолонок = Справочники.Назначения.ДобавитьОписаниеКолонок(МакетФормы, "ОбеспечениеЗаказовВсеСклады", Истина, "Объект.ТоварыПоПериодам.Назначение", "ОбеспечениеЗаказовВсеСкладыПоПериодам");
ОписаниеКолонок.Колонки.НайтиПоЗначению("Потребность").Пометка = Истина;
ОписаниеКолонок.УсловиеИспользования = "Объект.ВидПлана.ЗаполнятьСклад = ЛОЖЬ И Объект.ВидПлана.ЗаполнятьСкладВТЧ = ЛОЖЬ И Объект.ТоварыПоПериодам.Номенклатура.ТипНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа)";
ОписаниеКолонок.ПутиКДанным.Номенклатура = "Объект.ТоварыПоПериодам.Номенклатура";
ОписаниеКолонок.ПутиКДанным.Характеристика = "Объект.ТоварыПоПериодам.Характеристика";
ОписаниеКолонок = Справочники.Назначения.ДобавитьОписаниеКолонок(МакетФормы, "ВсеНазначения", Ложь, "Объект.Назначение");
Возврат МакетФормы;
КонецФункции
#КонецОбласти
#Область ЗагрузкаДанныхИзФайла
Процедура СопоставитьЗагружаемыеДанные(АдресЗагружаемыхДанных, АдресТаблицыСопоставления, СписокНеоднозначностей, ПолноеИмяТабличнойЧасти, ДополнительныеПараметры) Экспорт
Планирование.СопоставитьЗагружаемыеДанные(АдресЗагружаемыхДанных, АдресТаблицыСопоставления, СписокНеоднозначностей, ПолноеИмяТабличнойЧасти, ДополнительныеПараметры);
КонецПроцедуры
Процедура ЗаполнитьСписокНеоднозначностей(ПолноеИмяТабличнойЧасти, СписокНеоднозначностей, ИмяКолонки, ЗагружаемыеЗначенияСтрока, ДополнительныеПараметры) Экспорт
Планирование.ЗаполнитьСписокНеоднозначностей(СписокНеоднозначностей, ИмяКолонки, ЗагружаемыеЗначенияСтрока, ДополнительныеПараметры);
КонецПроцедуры
#КонецОбласти
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "ПланОстатков";
КомандаПечати.Представление = НСтр("ru = 'План остатков'");
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КонецПроцедуры
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПланОстатков") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ПланОстатков",
НСтр("ru = 'План остатков'"),
СформироватьПечатнуюФормуПлана(МассивОбъектов, ОбъектыПечати, ПараметрыПечати));
КонецЕсли;
ФормированиеПечатныхФорм.ЗаполнитьПараметрыОтправки(ПараметрыВывода.ПараметрыОтправки, МассивОбъектов, КоллекцияПечатныхФорм);
КонецПроцедуры
Функция СформироватьПечатнуюФормуПлана(МассивОбъектов, ОбъектыПечати, ПараметрыПечати)
УстановитьПривилегированныйРежим(Истина);
Если ПараметрыПечати <> Неопределено И ПараметрыПечати.Свойство("КроссТаблица") Тогда
ПоУмолчаниюКроссТаблица = ПараметрыПечати.КроссТаблица = Истина;
ПоУмолчаниюТаблица = ПараметрыПечати.КроссТаблица = Ложь;
Иначе
ПоУмолчаниюКроссТаблица = Ложь;
ПоУмолчаниюТаблица = Ложь;
КонецЕсли;
ВыводитьШапку = Истина;
Если ПараметрыПечати <> Неопределено И ПараметрыПечати.Свойство("ВыводитьШапку") Тогда
ВыводитьШапку = ПараметрыПечати.ВыводитьШапку;
КонецЕсли;
ВыводитьСценарий = Истина;
ВыводитьПериодСтатус = Истина;
ВыводитьСклад = Истина;
ВыводитьСкладВТЧ = Истина;
Если ПараметрыПечати <> Неопределено И Не ПараметрыПечати.Свойство("ВыводитьСценарий", ВыводитьСценарий) Тогда
ВыводитьСценарий = Истина;
КонецЕсли;
Если ПараметрыПечати <> Неопределено И Не ПараметрыПечати.Свойство("ВыводитьПериодСтатус", ВыводитьПериодСтатус) Тогда
ВыводитьПериодСтатус = Истина;
КонецЕсли;
Если ПараметрыПечати <> Неопределено И Не ПараметрыПечати.Свойство("ВыводитьСклад", ВыводитьСклад) Тогда
ВыводитьСклад = Истина;
КонецЕсли;
Если ПараметрыПечати <> Неопределено И Не ПараметрыПечати.Свойство("ВыводитьСкладВТЧ", ВыводитьСкладВТЧ) Тогда
ВыводитьСкладВТЧ = Истина;
КонецЕсли;
КолонкаКодов = ФормированиеПечатныхФорм.ДополнительнаяКолонкаПечатныхФормДокументов();
ИмяКолонкиКодов = КолонкаКодов.ИмяКолонки;
ПредставлениеКолонкиКодов = КолонкаКодов.ПредставлениеКолонки;
ВыводитьКоды = ЗначениеЗаполнено(ИмяКолонкиКодов);
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ТаблицаДокумента.Ссылка КАК Ссылка,
| ТаблицаДокумента.Номер КАК Номер,
| ТаблицаДокумента.Дата КАК Дата,
| ТаблицаДокумента.Ответственный КАК Ответственный,
| ТаблицаДокумента.Статус КАК Статус,
| ТаблицаДокумента.Периодичность КАК Периодичность,
| ТаблицаДокумента.НачалоПериода КАК НачалоПериода,
| ТаблицаДокумента.ОкончаниеПериода КАК ОкончаниеПериода,
| ТаблицаДокумента.НачалоПериода КАК ДатаОстатка,
| ТаблицаДокумента.Сценарий КАК Сценарий,
| ТаблицаДокумента.ВидПлана КАК ВидПлана,
| ВЫБОР
| КОГДА &ПоУмолчаниюКроссТаблица
| ИЛИ ТаблицаДокумента.КроссТаблица
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК КроссТаблица,
| ТаблицаДокумента.ЗаполненоАвтоматически КАК ЗаполненоАвтоматически,
| СпрВидыПланов.ЗаполнятьМенеджера КАК ЗаполнятьМенеджера,
| СпрВидыПланов.ЗаполнятьСклад КАК ЗаполнятьСклад,
| СпрВидыПланов.ЗаполнятьФорматМагазина КАК ЗаполнятьФорматМагазина,
| СпрВидыПланов.ЗаполнятьСкладВТЧ КАК ЗаполнятьСкладВТЧ,
| СценарииПланирования.ОтображатьНомерПериода КАК ОтображатьНомерПериода,
| Пользователи.ФизическоеЛицо КАК ОтветственныйФизЛицо,
| ТаблицаДокумента.Склад КАК Склад,
| ТаблицаДокумента.Назначение КАК Назначение,
| СценарииПланирования.ПланированиеПоНазначениям КАК ПланированиеПоНазначениям,
| СпрВидыПланов.ЗаполнятьНазначениеВТЧ КАК ЗаполнятьНазначениеВТЧ
|ИЗ
| Документ.ПланОстатков КАК ТаблицаДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СценарииТоварногоПланирования КАК СценарииПланирования
| ПО ТаблицаДокумента.Сценарий = СценарииПланирования.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыПланов КАК СпрВидыПланов
| ПО ТаблицаДокумента.ВидПлана = СпрВидыПланов.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи
| ПО ТаблицаДокумента.Ответственный = Пользователи.Ссылка
|ГДЕ
| ТаблицаДокумента.Ссылка В(&МассивДокументов)
|
|УПОРЯДОЧИТЬ ПО
| Ссылка
|;
|
|
|ВЫБРАТЬ
| ТаблицаТовары.Ссылка КАК Ссылка,
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Номенклатура.НаименованиеПолное КАК ТоварНаименованиеПолное,
| ТаблицаТовары.Номенклатура.Код КАК Код,
| ТаблицаТовары.Номенклатура.Артикул КАК Артикул,
| ВЫБОР
| КОГДА ТаблицаТовары.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ТОГДА ТаблицаТовары.Номенклатура.ЕдиницаИзмерения
| ИНАЧЕ ТаблицаТовары.Упаковка
| КОНЕЦ КАК ЕдиницаИзмерения,
| ТаблицаТовары.Характеристика.НаименованиеПолное КАК ХарактеристикаНаименованиеПолное,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ТаблицаТовары.Упаковка КАК Упаковка,
| ТаблицаТовары.НомерСтроки КАК НомерСтроки,
| ТаблицаТовары.ДатаОстатка КАК ДатаПериода,
| ТаблицаТовары.КоличествоУпаковок КАК Количество,
| ТаблицаТовары.Комментарий КАК Комментарий,
| ТаблицаТовары.Склад КАК Склад,
| ТаблицаТовары.Назначение.Наименование КАК НазначениеНаименование,
| ТаблицаТовары.Назначение КАК Назначение
|ИЗ
| Документ.ПланОстатков.Товары КАК ТаблицаТовары
|ГДЕ
| (&ПоУмолчаниюТаблица
| ИЛИ НЕ ТаблицаТовары.Ссылка.КроссТаблица)
| И ТаблицаТовары.Ссылка В(&МассивДокументов)
| И НЕ ТаблицаТовары.Отменено
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ВложенныйЗапрос.Ссылка,
| ВложенныйЗапрос.Номенклатура,
| ВложенныйЗапрос.Номенклатура.НаименованиеПолное,
| ВложенныйЗапрос.Номенклатура.Код,
| ВложенныйЗапрос.Номенклатура.Артикул,
| ВЫБОР
| КОГДА ВложенныйЗапрос.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ТОГДА ВложенныйЗапрос.Номенклатура.ЕдиницаИзмерения
| ИНАЧЕ ВложенныйЗапрос.Упаковка
| КОНеЦ,
| ВложенныйЗапрос.Характеристика.НаименованиеПолное,
| ВложенныйЗапрос.Характеристика,
| ВложенныйЗапрос.Упаковка,
| МИНИМУМ(ВложенныйЗапрос.НомерСтроки),
| ВложенныйЗапрос.ДатаПериода,
| СУММА(ВложенныйЗапрос.КоличествоУпаковок),
| МАКСИМУМ(ВложенныйЗапрос.Комментарий),
| ВложенныйЗапрос.Склад,
| ВложенныйЗапрос.Назначение.Наименование,
| ВложенныйЗапрос.Назначение
|ИЗ
| (ВЫБРАТЬ
| ТаблицаТовары.Ссылка КАК Ссылка,
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ТаблицаТовары.Упаковка КАК Упаковка,
| ВЫБОР ТаблицаДокумента.Периодичность
| КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.Год)
| ТОГДА НАЧАЛОПЕРИОДА(ТаблицаТовары.ДатаОстатка, ГОД)
| КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.Полугодие)
| ТОГДА НАЧАЛОПЕРИОДА(ТаблицаТовары.ДатаОстатка, ПОЛУГОДИЕ)
| КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.Квартал)
| ТОГДА НАЧАЛОПЕРИОДА(ТаблицаТовары.ДатаОстатка, КВАРТАЛ)
| КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.Месяц)
| ТОГДА НАЧАЛОПЕРИОДА(ТаблицаТовары.ДатаОстатка, МЕСЯЦ)
| КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.Декада)
| ТОГДА НАЧАЛОПЕРИОДА(ТаблицаТовары.ДатаОстатка, ДЕКАДА)
| КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.Неделя)
| ТОГДА НАЧАЛОПЕРИОДА(ТаблицаТовары.ДатаОстатка, НеДЕЛЯ)
| ИНАЧЕ ТаблицаТовары.ДатаОстатка
| КОНЕЦ КАК ДатаПериода,
| ТаблицаТовары.НомерСтроки КАК НомерСтроки,
| ВЫБОР КОГДА ТаблицаТовары.Отменено ТОГДА 0 ИНАЧЕ ТаблицаТовары.КоличествоУпаковок КОНЕЦ КАК КоличествоУпаковок,
| ВЫБОР КОГДА ТаблицаТовары.Отменено ТОГДА """" ИНАЧЕ ВЫРАЗИТЬ(ТаблицаТовары.Комментарий КАК СТРОКА(1000)) КОНЕЦ КАК Комментарий,
| ТаблицаТовары.Склад КАК Склад,
| ТаблицаТовары.Назначение КАК Назначение
| ИЗ
| Документ.ПланОстатков.Товары КАК ТаблицаТовары
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПланОстатков КАК ТаблицаДокумента
| ПО ТаблицаТовары.Ссылка = ТаблицаДокумента.Ссылка
| ГДЕ
| (&ПоУмолчаниюКроссТаблица
| ИЛИ ТаблицаТовары.Ссылка.КроссТаблица)
| И ТаблицаТовары.Ссылка В(&МассивДокументов)
| ) КАК ВложенныйЗапрос
|
|СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.Ссылка,
| ВложенныйЗапрос.Номенклатура,
| ВложенныйЗапрос.Номенклатура.НаименованиеПолное,
| ВложенныйЗапрос.Номенклатура.Код,
| ВложенныйЗапрос.Номенклатура.Артикул,
| ВложенныйЗапрос.Характеристика,
| ВложенныйЗапрос.Характеристика.НаименованиеПолное,
| ВложенныйЗапрос.Назначение,
| ВложенныйЗапрос.Назначение.Наименование,
| ВложенныйЗапрос.Склад,
| ВложенныйЗапрос.ДатаПериода,
| ВЫБОР
| КОГДА ВложенныйЗапрос.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ТОГДА ВложенныйЗапрос.Номенклатура.ЕдиницаИзмерения
| ИНАЧЕ ВложенныйЗапрос.Упаковка
| КОНеЦ,
| ВложенныйЗапрос.Упаковка
|
|УПОРЯДОЧИТЬ ПО
| Ссылка,
| НомерСтроки,
| ТоварНаименованиеПолное,
| ХарактеристикаНаименованиеПолное,
| НазначениеНаименование,
| Склад,
| ЕдиницаИзмерения,
| ДатаПериода
|ИТОГИ ПО
| Ссылка");
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ПланОстатков_ПланОстатков";
Запрос.УстановитьПараметр("МассивДокументов", МассивОбъектов);
Запрос.УстановитьПараметр("ПоУмолчаниюКроссТаблица", ПоУмолчаниюКроссТаблица);
Запрос.УстановитьПараметр("ПоУмолчаниюТаблица", ПоУмолчаниюТаблица);
МассивРезультатов = Запрос.ВыполнитьПакет();
ДанныеПечати = МассивРезультатов[0].Выбрать();
ВыборкаПоДокументам = МассивРезультатов[1].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ПервыйДокумент = Истина;
ЕстьКроссТаблицы = Ложь;
НачалоШапки = 0;
ОкончаниеШапки = 0;
ШиринаНомера = 0;
ОкончаниеНомера = 0;
ИспользоватьХарактеристикиНоменклатуры = ПолучитьФункциональнуюОпцию("ИспользоватьХарактеристикиНоменклатуры");
Пока ДанныеПечати.Следующий() Цикл
СтруктураПоиска = Новый Структура("Ссылка", ДанныеПечати.Ссылка);
НайденСледующий = ВыборкаПоДокументам.НайтиСледующий(СтруктураПоиска);
ВыборкаПоТоварам = ВыборкаПоДокументам.Выбрать();
КроссТаблица = ДанныеПечати.КроссТаблица;
Если КроссТаблица Тогда
ТаблицаПериодов = Планирование.ШаблонТаблицыПериодов();
Планирование.ЗаполнитьТаблицуПериодов(ТаблицаПериодов,
ДанныеПечати.Периодичность,
ДанныеПечати.НачалоПериода,
ДанныеПечати.ОкончаниеПериода,
?(ВыводитьШапку, ДанныеПечати.ОтображатьНомерПериода, Ложь));
КроссТаблица = ТаблицаПериодов.Количество() > 1 ИЛИ Не ВыводитьШапку;
КонецЕсли;
Макет = УправлениеПечатью.МакетПечатнойФормы("Документ.ПланОстатков.ПФ_MXL_ПланОстатков");
Если Не ПервыйДокумент Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ПервыйДокумент = Ложь;
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
Если ВыводитьШапку Тогда
ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
ШтрихкодированиеПечатныхФорм.ВывестиШтрихкодВТабличныйДокумент(ТабличныйДокумент, Макет, ОбластьМакета, ДанныеПечати.Ссылка);
ТекстЗаголовка = ОбщегоНазначенияУТКлиентСервер.СформироватьЗаголовокДокумента(ДанныеПечати, НСтр("ru='План остатков'"));
ОбластьМакета.Параметры.ТекстЗаголовка = ТекстЗаголовка;
ТабличныйДокумент.Вывести(ОбластьМакета);
Если ВыводитьСценарий Тогда
ОбластьМакета = Макет.ПолучитьОбласть("Сценарий");
ПредставлениеСценария = Строка(ДанныеПечати.Сценарий) + ", "+ Строка(ДанныеПечати.Периодичность);
ОбластьМакета.Параметры.ПредставлениеСценария = ПредставлениеСценария;
ОбластьМакета.Параметры.Сценарий = ДанныеПечати.Сценарий;
ПредставлениеВидаПлана = Строка(ДанныеПечати.ВидПлана);
ОбластьМакета.Параметры.ПредставлениеВидаПлана = ПредставлениеВидаПлана;
ОбластьМакета.Параметры.ВидПлана = ДанныеПечати.ВидПлана;
ТабличныйДокумент.Вывести(ОбластьМакета);
КонецЕсли;
Если ВыводитьПериодСтатус Тогда
ОбластьМакета = Макет.ПолучитьОбласть("ПериодСтатус");
ОбластьМакета.Параметры.ДатаОстатка = Формат(ДанныеПечати.ДатаОстатка, "ДЛФ=D");
ОбластьМакета.Параметры.Статус = Строка(ДанныеПечати.Статус);
ТабличныйДокумент.Вывести(ОбластьМакета);
КонецЕсли;
Если ДанныеПечати.ЗаполнятьСклад И ВыводитьСклад Тогда
ОбластьМакета = Макет.ПолучитьОбласть("Склад");
ПредставлениеСклада = Строка(ДанныеПечати.Склад);
ОбластьМакета.Параметры.ПредставлениеСклада = ПредставлениеСклада;
ОбластьМакета.Параметры.Склад = ДанныеПечати.Склад;
ТабличныйДокумент.Вывести(ОбластьМакета);
КонецЕсли;
Если ДанныеПечати.ПланированиеПоНазначениям
И Не ДанныеПечати.ЗаполнятьНазначениеВТЧ Тогда
ОбластьМакета = Макет.ПолучитьОбласть("Назначение");
ПредставлениеНазначение = Строка(ДанныеПечати.Назначение);
ОбластьМакета.Параметры.ПредставлениеНазначение = ПредставлениеНазначение;
ОбластьМакета.Параметры.Назначение = ДанныеПечати.Назначение;
ТабличныйДокумент.Вывести(ОбластьМакета);
КонецЕсли;
КонецЕсли;
ДопПоля = Новый Массив;
Если ДанныеПечати.ПланированиеПоНазначениям
И ДанныеПечати.ЗаполнятьНазначениеВТЧ Тогда
СтруктураДопПоля = Новый Структура;
СтруктураДопПоля.Вставить("Заголовок", НСтр("ru='Назначение'", ОбщегоНазначения.КодОсновногоЯзыка()));
СтруктураДопПоля.Вставить("КолонкаЗначения", "Назначение");
ДопПоля.Добавить(СтруктураДопПоля);
КонецЕсли;
Если ДанныеПечати.ЗаполнятьСкладВТЧ Тогда
СтруктураДопПоля = Новый Структура;
СтруктураДопПоля.Вставить("Заголовок", НСтр("ru='Склад'", ОбщегоНазначения.КодОсновногоЯзыка()));
СтруктураДопПоля.Вставить("КолонкаЗначения", "Склад");
ДопПоля.Добавить(СтруктураДопПоля);
КонецЕсли;
Количество = ?(КроссТаблица, "КоличествоКросс", "Количество");
Товар = ?(Не (ВыводитьШапку ИЛИ ИспользоватьХарактеристикиНоменклатуры), "ТоварБезХарактеристик", "Товар");
ШиринаКолонкиТовара = Макет.Область(Товар).ШиринаКолонки * 2;
Если Не ВыводитьКоды Тогда
ШиринаКолонкиТовара = ШиринаКолонкиТовара + Макет.Область("КолонкаКодов").ШиринаКолонки;
КонецЕсли;
Если ДопПоля.Количество() > 0 Тогда
ШиринаКолонкиТовара = ШиринаКолонкиТовара -Макет.Область("ТоварДопПоле"+ Формат(ДопПоля.Количество(), "ЧДЦ=0; ЧГ=0")).ШиринаКолонки * ДопПоля.Количество();
КонецЕсли;
Если ВыводитьШапку ИЛИ ИспользоватьХарактеристикиНоменклатуры Тогда
ШиринаКолонкиТовара = ШиринаКолонкиТовара / 2;
КонецЕсли;
Макет.Область(Товар).ШиринаКолонки = ШиринаКолонкиТовара;
ПериодовНаПервойСтранице = 2;
ПериодовНаСтранице = 7;
ОбластьНомера = Макет.ПолучитьОбласть("ШапкаТаблицы|НомерСтроки");
ОбластьУИ = Макет.ПолучитьОбласть("ШапкаТаблицы|УникальныеИдентификаторы");
ОбластьКодов = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаКодов");
ОбластьТовар = Макет.ПолучитьОбласть(?(ВыводитьШапку,"ШапкаТаблицы","ШапкаТаблицыНХ") + "|" + Товар);
ОбластьДанных = Макет.ПолучитьОбласть(?(ВыводитьШапку ИЛИ КроссТаблица,"ШапкаТаблицы","ШапкаТаблицыНХ") + "|" + Количество);
ОбластьДанныхКроссОкончание = Макет.ПолучитьОбласть("ШапкаТаблицы|КоличествоКроссОкончание");
ОбластьКроссЕдиницаИзмерения = Макет.ПолучитьОбласть("ШапкаТаблицы|КроссЕдиницаИзмерения");
Если ДопПоля.Количество() > 0 Тогда
ОбластьТоварДопПоле = Макет.ПолучитьОбласть("ШапкаТаблицы|ТоварДопПоле"+ Формат(ДопПоля.Количество(), "ЧДЦ=0; ЧГ=0"));
КонецЕсли;
ТабличныйДокумент.Вывести(ОбластьНомера);
Если Не ВыводитьШапку Тогда
ТабличныйДокумент.Присоединить(ОбластьУИ);
КонецЕсли;
Если ВыводитьКоды Тогда
ОбластьКодов.Параметры.ИмяКолонкиКодов = ПредставлениеКолонкиКодов;
ТабличныйДокумент.Присоединить(ОбластьКодов);
КонецЕсли;
ТабличныйДокумент.Присоединить(ОбластьТовар);
Для каждого ДопПоле Из ДопПоля Цикл
ОбластьТоварДопПоле.Параметры.Заголовок = ДопПоле.Заголовок;
ТабличныйДокумент.Присоединить(ОбластьТоварДопПоле);
КонецЦикла;
НомерСтраницы = 1;
Если КроссТаблица Тогда
ТабличныйДокумент.Присоединить(ОбластьКроссЕдиницаИзмерения);
Для каждого Период Из ТаблицаПериодов Цикл
Индекс = ТаблицаПериодов.Индекс(Период);
Если Индекс = ТаблицаПериодов.Количество()-1 Тогда
ОбластьДанныхКроссОкончание.Параметры.Заголовок = Период.Заголовок;
ТабличныйДокумент.Присоединить(ОбластьДанныхКроссОкончание);
Иначе
ОбластьДанных.Параметры.Заголовок = Период.Заголовок;
ТабличныйДокумент.Присоединить(ОбластьДанных);
КонецЕсли;
КонецЦикла;
Иначе
ТабличныйДокумент.Присоединить(ОбластьДанных);
КонецЕсли;
НачалоШапки = ТабличныйДокумент.ВысотаТаблицы - ОбластьНомера.ВысотаТаблицы +1;
ОкончаниеШапки = ТабличныйДокумент.ВысотаТаблицы;
ШиринаНомера = ОбластьНомера.ШиринаТаблицы;
ОбластьНомера = Макет.ПолучитьОбласть("СтрокаТаблицы|НомерСтроки");
ОбластьУИ = Макет.ПолучитьОбласть("СтрокаТаблицы|УникальныеИдентификаторы");
ОбластьКодов = Макет.ПолучитьОбласть("СтрокаТаблицы|КолонкаКодов");
ОбластьТовар = Макет.ПолучитьОбласть("СтрокаТаблицы|" + Товар);
ОбластьДанных = Макет.ПолучитьОбласть("СтрокаТаблицы|" + Количество);
ОбластьДанныхКроссОкончание = Макет.ПолучитьОбласть("СтрокаТаблицы|КоличествоКроссОкончание");
ОбластьКроссЕдиницаИзмерения = Макет.ПолучитьОбласть("СтрокаТаблицы|КроссЕдиницаИзмерения");
Если ДопПоля.Количество() > 0 Тогда
ОбластьТоварДопПоле = Макет.ПолучитьОбласть("СтрокаТаблицы|ТоварДопПоле"+ Формат(ДопПоля.Количество(), "ЧДЦ=0; ЧГ=0") );
КонецЕсли;
ТекущаяСтрока = Новый Структура("Номенклатура, Характеристика, Назначение, Склад, ЕдиницаИзмерения");
ТекущийПериод = 0;
НомерСтроки = 0;
Пока ВыборкаПоТоварам.Следующий() Цикл
ОдинаковыеСтроки = Истина;
Если КроссТаблица Тогда
Для каждого Элемент Из ТекущаяСтрока Цикл
Если ВыборкаПоТоварам[Элемент.Ключ] <> Элемент.Значение Тогда
ОдинаковыеСтроки = Ложь;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если Не КроссТаблица ИЛИ КроссТаблица И Не ОдинаковыеСтроки Тогда
Если КроссТаблица И ТекущийПериод <> 0 И ТекущийПериод < ТаблицаПериодов.Количество() Тогда
Пока ТекущийПериод < ТаблицаПериодов.Количество() Цикл
ТекущийПериод = ТекущийПериод + 1;
Если ТекущийПериод < ТаблицаПериодов.Количество() Тогда
ТабличныйДокумент.Присоединить(Макет.ПолучитьОбласть("СтрокаТаблицы|" + Количество));
Иначе
ТабличныйДокумент.Присоединить(Макет.ПолучитьОбласть("СтрокаТаблицы|КоличествоКроссОкончание"));
КонецЕсли;
КонецЦикла;
КонецЕсли;
ЗаполнитьЗначенияСвойств(ТекущаяСтрока, ВыборкаПоТоварам);
ТекущийПериод = 0;
НомерСтроки = НомерСтроки + 1;
ОбластьНомера.Параметры.НомерСтроки = НомерСтроки;
ТабличныйДокумент.Вывести(ОбластьНомера);
Если Не ВыводитьШапку Тогда
ОбластьУИ.Параметры.УникальныйИдентификаторНоменклатура = Строка(ВыборкаПоТоварам.Номенклатура.УникальныйИдентификатор());
ОбластьУИ.Параметры.УникальныйИдентификаторХарактеристика = Строка(ВыборкаПоТоварам.Характеристика.УникальныйИдентификатор());
ОбластьУИ.Параметры.УникальныйИдентификаторУпаковка = Строка(ВыборкаПоТоварам.Упаковка.УникальныйИдентификатор());
ОбластьУИ.Параметры.УникальныйИдентификаторСклад = Строка(ВыборкаПоТоварам.Склад.УникальныйИдентификатор());
ОбластьУИ.Параметры.УникальныйИдентификаторНазначение = Строка(ВыборкаПоТоварам.Назначение.УникальныйИдентификатор());
ТабличныйДокумент.Присоединить(ОбластьУИ);
КонецЕсли;
Если ВыводитьКоды Тогда
ОбластьКодов.Параметры.Артикул = ВыборкаПоТоварам[ИмяКолонкиКодов];
ТабличныйДокумент.Присоединить(ОбластьКодов);
КонецЕсли;
ДопПараметрыПредставлениеНоменклатуры = НоменклатураКлиентСервер.ДополнительныеПараметрыПредставлениеНоменклатурыДляПечати();
ДопПараметрыПредставлениеНоменклатуры.КодОсновногоЯзыка = ОбщегоНазначения.КодОсновногоЯзыка();
ОбластьТовар.Параметры.Заполнить(ВыборкаПоТоварам);
ОбластьТовар.Параметры.Товар = НоменклатураКлиентСервер.ПредставлениеНоменклатурыДляПечати(
ВыборкаПоТоварам.ТоварНаименованиеПолное,
ВыборкаПоТоварам.ХарактеристикаНаименованиеПолное,
,
,
ДопПараметрыПредставлениеНоменклатуры);
ТабличныйДокумент.Присоединить(ОбластьТовар);
Для каждого ДопПоле Из ДопПоля Цикл
ОбластьТоварДопПоле.Параметры.Значение = ВыборкаПоТоварам[ДопПоле.КолонкаЗначения];
ТабличныйДокумент.Присоединить(ОбластьТоварДопПоле);
КонецЦикла;
Если КроссТаблица Тогда
ОбластьКроссЕдиницаИзмерения.Параметры.Заполнить(ВыборкаПоТоварам);
ТабличныйДокумент.Присоединить(ОбластьКроссЕдиницаИзмерения);
КонецЕсли;
КонецЕсли;
Если КроссТаблица Тогда
Период = ТаблицаПериодов.Найти(ВыборкаПоТоварам.ДатаПериода, "ДатаНачала");
Индекс = ТаблицаПериодов.Индекс(Период);
ПустаяОбластьДанных = Макет.ПолучитьОбласть("СтрокаТаблицы|" + Количество);
ПустаяОбластьДанныхКроссОкончание = Макет.ПолучитьОбласть("СтрокаТаблицы|КоличествоКроссОкончание");
Пока ТекущийПериод < Период.НомерКолонки Цикл
ТекущийПериод = ТекущийПериод + 1;
ОбластьДанных = ПустаяОбластьДанных;
ОбластьДанныхКроссОкончание = ПустаяОбластьДанныхКроссОкончание;
Если ТекущийПериод = Период.НомерКолонки Тогда
Если Индекс < ТаблицаПериодов.Количество()-1 Тогда
ОбластьДанных.Параметры.Заполнить(ВыборкаПоТоварам);
Область = ОбластьДанных.Область("R1C1:R1C1");
Область.Примечание.Текст = ВыборкаПоТоварам.Комментарий;
ТабличныйДокумент.Присоединить(ОбластьДанных);
Иначе
ОбластьДанныхКроссОкончание.Параметры.Заполнить(ВыборкаПоТоварам);
Область = ОбластьДанныхКроссОкончание.Область("R1C1:R1C1");
Область.Примечание.Текст = ВыборкаПоТоварам.Комментарий;
ТабличныйДокумент.Присоединить(ОбластьДанныхКроссОкончание);
КонецЕсли;
Иначе
ТабличныйДокумент.Присоединить(ОбластьДанных);
КонецЕсли;
КонецЦикла;
Если ТекущийПериод = ТаблицаПериодов.Количество() Тогда
ТекущийПериод = 0;
КонецЕсли;
Иначе
ОбластьДанных.Параметры.Заполнить(ВыборкаПоТоварам);
Область = ОбластьДанных.Область("R1C1:R1C1");
Область.Примечание.Текст = ВыборкаПоТоварам.Комментарий;
ТабличныйДокумент.Присоединить(ОбластьДанных);
КонецЕсли;
КонецЦикла;
Если КроссТаблица И ТекущийПериод <> 0 И ТекущийПериод < ТаблицаПериодов.Количество() Тогда
Пока ТекущийПериод < ТаблицаПериодов.Количество() Цикл
ТекущийПериод = ТекущийПериод + 1;
Если ТекущийПериод < ТаблицаПериодов.Количество() Тогда
ТабличныйДокумент.Присоединить(Макет.ПолучитьОбласть("СтрокаТаблицы|" + Количество));
Иначе
ТабличныйДокумент.Присоединить(Макет.ПолучитьОбласть("СтрокаТаблицы|КоличествоКроссОкончание"));
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если ВыводитьШапку Тогда
ОбластьНомера = Макет.ПолучитьОбласть("ПодвалТаблицы|НомерСтроки");
ОбластьУИ = Макет.ПолучитьОбласть("ПодвалТаблицы|УникальныеИдентификаторы");
ОбластьКодов = Макет.ПолучитьОбласть("ПодвалТаблицы|КолонкаКодов");
ОбластьТовар = Макет.ПолучитьОбласть("ПодвалТаблицы|" + Товар);
ОбластьДанных = Макет.ПолучитьОбласть("ПодвалТаблицы|" + Количество);
ОбластьДанныхКроссОкончание = Макет.ПолучитьОбласть("ПодвалТаблицы|КоличествоКроссОкончание");
ОбластьКроссЕдиницаИзмерения = Макет.ПолучитьОбласть("ПодвалТаблицы|КроссЕдиницаИзмерения");
Если ДопПоля.Количество() > 0 Тогда
ОбластьТоварДопПоле = Макет.ПолучитьОбласть("ПодвалТаблицы|ТоварДопПоле"+ Формат(ДопПоля.Количество(), "ЧДЦ=0; ЧГ=0") );
КонецЕсли;
ТабличныйДокумент.Вывести(ОбластьНомера);
Если ВыводитьКоды Тогда
ТабличныйДокумент.Присоединить(ОбластьКодов);
КонецЕсли;
ТабличныйДокумент.Присоединить(ОбластьТовар);
Для каждого ДопПоле Из ДопПоля Цикл
ТабличныйДокумент.Присоединить(ОбластьТоварДопПоле);
КонецЦикла;
Если КроссТаблица Тогда
ТабличныйДокумент.Присоединить(ОбластьКроссЕдиницаИзмерения);
Для каждого Период Из ТаблицаПериодов Цикл
Если Период.Активная И Период.НомерКолонки <= 0 Тогда
Продолжить;
КонецЕсли;
ТабличныйДокумент.Присоединить(ОбластьДанных);
КонецЦикла;
Иначе
ТабличныйДокумент.Присоединить(ОбластьДанных);
КонецЕсли;
ОкончаниеНомера = ТабличныйДокумент.ВысотаТаблицы;
ОбластьМакета = Макет.ПолучитьОбласть("ИтоговаяСтрока");
ИтоговаяСтрока = НСтр("ru='Всего наименований %КоличествоНаименований%.'", ОбщегоНазначения.КодОсновногоЯзыка());
ИтоговаяСтрока = СтрЗаменить(ИтоговаяСтрока, "%КоличествоНаименований%", НомерСтроки);
ОбластьМакета.Параметры.ИтоговаяСтрока = ИтоговаяСтрока;
ТабличныйДокумент.Вывести(ОбластьМакета);
ОбластьМакета = Макет.ПолучитьОбласть("Подписи");
Если ЗначениеЗаполнено(ДанныеПечати.ОтветственныйФизЛицо) Тогда
ОбластьМакета.Параметры.ПредставлениеОтветственного =
ФизическиеЛицаУТ.ФамилияИнициалыФизЛица(ДанныеПечати.ОтветственныйФизЛицо, ДанныеПечати.Дата);
ОбластьМакета.Параметры.Ответственный = ДанныеПечати.ОтветственныйФизЛицо;
КонецЕсли;
ТабличныйДокумент.Вывести(ОбластьМакета);
КонецЕсли;
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ДанныеПечати.Ссылка);
Если КроссТаблица Тогда
ЕстьКроссТаблицы = Истина;
КонецЕсли;
КонецЦикла;
Если ДанныеПечати.Количество() = 1 И ЕстьКроссТаблицы Тогда
ОбластьШапки = ТабличныйДокумент.Область(НачалоШапки, , ОкончаниеШапки, );
ТабличныйДокумент.ПовторятьПриПечатиСтроки = ОбластьШапки;
ОбластьНомера = ТабличныйДокумент.Область(, 1, , ШиринаНомера);
ТабличныйДокумент.ПовторятьПриПечатиКолонки = ОбластьНомера;
КонецЕсли;
ТабличныйДокумент.АвтоМасштаб = Истина;
Возврат ТабличныйДокумент;
КонецФункции
Функция СоздатьПрисоединенныйФайлExcel(ДокументСсылка, ИдентификаторФормы) Экспорт
ПараметрыПечати = Новый Структура;
ПараметрыПечати.Вставить("ВыводитьШапку", Ложь);
МассивДокументов = Новый Массив;
МассивДокументов.Добавить(ДокументСсылка);
ОбъектыПечати = Новый СписокЗначений;
ОбъектыПечати.Добавить(ДокументСсылка);
ТабличныйДокумент = СформироватьПечатнуюФормуПлана(МассивДокументов, ОбъектыПечати, ПараметрыПечати);
ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
ТабличныйДокумент.Записать(ИмяВременногоФайла, ТипФайлаТабличногоДокумента.XLS97);
АдресФайлаВоВременномХранилище = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяВременногоФайла), ИдентификаторФормы);
ТекущаяДата = ТекущаяДатаСеанса();
ПараметрыФайла = Новый Структура();
ПараметрыФайла.Вставить("Автор", Пользователи.АвторизованныйПользователь());
ПараметрыФайла.Вставить("ВладелецФайлов", ДокументСсылка);
ПараметрыФайла.Вставить("ИмяБезРасширения", "Excel" + " " + Формат(ТекущаяДата, НСтр("ru = 'ДФ=''dd.MM.yyyy ЧЧ.мм.сс'''")));
ПараметрыФайла.Вставить("РасширениеБезТочки", "xls");
ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное", ТекущаяДата);
Файл = РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, АдресФайлаВоВременномХранилище, Неопределено);
УдалитьФайлы(ИмяВременногоФайла);
Если Файл <> Неопределено Тогда
РаботаСФайламиСлужебный.ЗанятьФайлДляРедактированияСервер(Файл);
ДанныеФайла = РаботаСФайлами.ДанныеФайла(Файл, ИдентификаторФормы, Истина);
СтруктураДействийExcel = Новый Структура;
СтруктураДействийExcel.Вставить("AutoFilter", Новый Структура("СтрокаНачало, КолонкаНачало", 2, 2));
МассивКолонок = Новый Массив;
МассивКолонок.Добавить(3);
МассивКолонок.Добавить(4);
МассивКолонок.Добавить(5);
МассивКолонок.Добавить(6);
МассивКолонок.Добавить(7);
МассивКолонок.Добавить(8);
МассивКолонок.Добавить(9);
СтруктураДействийExcel.Вставить("HiddenColumns", МассивКолонок);
Возврат Новый Структура("ДанныеФайла, Файл, СтруктураДействийExcel", ДанныеФайла, Файл, СтруктураДействийExcel);
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
#КонецОбласти
#Область ТекущиеДела
Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт
ИмяФормы = "Документ.ПланОстатков.Форма.ФормаСписка";
ОбщиеПараметрыЗапросов = ТекущиеДелаСлужебный.ОбщиеПараметрыЗапросов();
Доступность =
(ОбщиеПараметрыЗапросов.ЭтоПолноправныйПользователь
Или ПравоДоступа("Просмотр", Метаданные.Документы.ПланОстатков))
И ПравоДоступа("Добавление", Метаданные.Документы.ПланОстатков)
И ПолучитьФункциональнуюОпцию("ИспользоватьПланированиеОстатков");
Если Не Доступность Тогда
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| КОЛИЧЕСТВО(*) КАК ПланыОстатковОжидающиеСогласования,
| МИНИМУМ(Планы.Статус.Порядок) КАК СтатусПорядок
|ИЗ
| Документ.ПланОстатков КАК Планы
|ГДЕ
| НАЧАЛОПЕРИОДА(&ТекущаяДата, ДЕНЬ) <= Планы.ОкончаниеПериода
| И ВЫБОР
| КОГДА НЕ Планы.Замещающий
| ТОГДА Планы.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыПланов.НаУтверждении)
| КОГДА Планы.Замещающий
| И Планы.Статус <> ЗНАЧЕНИЕ(Перечисление.СтатусыПланов.Утвержден)
| И Планы.Статус.Порядок >= 2
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
| И Планы.Проведен";
Результат = ТекущиеДелаСлужебный.ЧисловыеПоказателиТекущихДел(Запрос, ОбщиеПараметрыЗапросов);
ДелоРодитель = ТекущиеДела.Найти("ПланыЗакупок", "Идентификатор");
Если ДелоРодитель = Неопределено Тогда
ДелоРодитель = ТекущиеДела.Добавить();
ДелоРодитель.Идентификатор = "ПланыЗакупок";
ДелоРодитель.Представление = НСтр("ru = 'Планы ожидающие согласования'");
ДелоРодитель.Владелец = Планирование.ПодсистемаПланирование();
КонецЕсли;
ПараметрыОтбора = Новый Структура;
Если Перечисления.СтатусыПланов[Результат.СтатусПорядок] = Перечисления.СтатусыПланов.НаУтверждении Тогда
ПараметрыОтбора.Вставить("Статус", Перечисления.СтатусыПланов.НаУтверждении);
КонецЕсли;
ПараметрыОтбора.Вставить("ПометкаУдаления", Ложь);
Дело = ТекущиеДела.Добавить();
Дело.Идентификатор = "ПланыОстатковОжидающиеСогласования";
Дело.ЕстьДела = Результат.ПланыОстатковОжидающиеСогласования > 0;
Дело.Представление = НСтр("ru = 'Планы остатков'");
Дело.Количество = Результат.ПланыОстатковОжидающиеСогласования;
Дело.Важное = Ложь;
Дело.Форма = ИмяФормы;
Дело.ПараметрыФормы = Новый Структура("СтруктураБыстрогоОтбора", ПараметрыОтбора);
Дело.Владелец = "ПланыЗакупок";
Если Результат.ПланыОстатковОжидающиеСогласования > 0 Тогда
ДелоРодитель.ЕстьДела = Истина;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецЕсли