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