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