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