История изменения форматов магазинов / Форма редактирования / Модуль формы

файл

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
		Возврат;
	КонецЕсли;
	
	Склад = Параметры.Склад;
	ФорматМагазина = Параметры.ФорматМагазина;
	Если ЗначениеЗаполнено(Склад) Тогда
	
		Элементы.ОтборСклад.Видимость = Ложь;
		Элементы.СписокСклад.Видимость = Ложь;
	
	КонецЕсли; 
	Если ЗначениеЗаполнено(ФорматМагазина) Тогда
	
		Элементы.ОтборФорматМагазина.Видимость = Ложь;
		Элементы.СписокФорматМагазина.Видимость = Ложь;
	
	КонецЕсли;
	
	ДатаНачала = ТекущаяДатаСеанса();
	
	ПравоДоступаИзменение = ПравоДоступа("Изменение", Метаданные.РегистрыСведений.ИсторияИзмененияФорматовМагазинов);
	Элементы.СписокСоздать.Видимость = ПравоДоступаИзменение;
	Элементы.СписокСкопировать.Видимость = ПравоДоступаИзменение;
	Элементы.СписокОчиститьФормат.Видимость = ПравоДоступаИзменение;
	Элементы.СписокКонтекстноеМенюОчиститьФормат.Видимость = ПравоДоступаИзменение;
	
	Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьФорматыМагазинов") Тогда
	
		ЭтаФорма.Заголовок = НСтр("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)));
	Запрос.УстановитьПараметр("ОкончаниеПериода", ДатаОкончания);
	Запрос.УстановитьПараметр("Склад",            Склад);
	Запрос.УстановитьПараметр("ФорматМагазина",   ФорматМагазина);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Таблица = РезультатЗапроса.Выгрузить();
	
	Список.Загрузить(Таблица);
	
КонецПроцедуры 

&НаСервереБезКонтекста
Функция ПолучитьКлючЗаписи(Период, Склад)
	
	СтруктураКлюча = Новый  Структура("Период, Склад", Период, Склад);
	Возврат РегистрыСведений.ИсторияИзмененияФорматовМагазинов.СоздатьКлючЗаписи(СтруктураКлюча);
	
КонецФункции

&НаСервере
Процедура ОчиститьФорматНаСервере(Склад, Период)

	НаборЗаписей = РегистрыСведений.ИсторияИзмененияФорматовМагазинов.СоздатьНаборЗаписей();
	НаборЗаписей.Отбор.Склад.Установить(Склад);
	НаборЗаписей.Отбор.Период.Установить(Период);
	
	РСЗапись = НаборЗаписей.Добавить();
	РСЗапись.Период = Период;
	РСЗапись.Склад = Склад;
	
	НаборЗаписей.Записать();
	ОбновитьСписок();

КонецПроцедуры

#КонецОбласти







 
 
 

Связанные материалы