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