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