Диспетчирование, сборка и доставка / Настройки / Модуль формы

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	Элементы.ГруппаСклады.Видимость     = НЕ РежимРедактированияСклады;
	Элементы.ГруппаСотрудники.Видимость = РежимРедактированияСклады;
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыСклады

&НаКлиенте
Процедура СкладыПриАктивизацииСтроки(Элемент)
	ЗаполнитьСотрудников(Элемент.ТекущаяСтрока);
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыСотрудники

&НаКлиенте
Процедура СотрудникиПередУдалением(Элемент, Отказ)
	
	Склад = Элементы.Склады.ТекущаяСтрока;
	
	Для Каждого ИндексСтроки Из Элемент.ВыделенныеСтроки Цикл
		СтрокаСотрудник = Сотрудники.НайтиПоИдентификатору(ИндексСтроки);
		УдалитьИнформациюОСотруднике(СтрокаСотрудник.Сотрудник, Склад);
	КонецЦикла;
	
КонецПроцедуры

&НаКлиенте
Процедура СотрудникиПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
	
	Склад = Элементы.Склады.ТекущаяСтрока;
	
	Если Элемент.ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Если Элемент.ТекущиеДанные.Сотрудник <> ТекущийСотрудник Тогда
		УдалитьИнформациюОСотруднике(ТекущийСотрудник, Склад);
	КонецЕсли;
	
	ЗаписатьИнформациюОСотрудниках(Элементы.Сотрудники.ТекущаяСтрока, Склад);
	
КонецПроцедуры

&НаКлиенте
Процедура СотрудникиПриАктивизацииСтроки(Элемент)
	
	Попытка
		ТекущийСотрудник = Элемент.ТекущиеДанные.Сотрудник;
	Исключение
	КонецПопытки;
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыСотрудники2

&НаКлиенте
Процедура Сотрудники2ПриАктивизацииСтроки(Элемент)
	ЗаполнитьСклады(Элемент.ТекущаяСтрока);
КонецПроцедуры

&НаКлиенте
Процедура Склады2ПриАктивизацииСтроки(Элемент)
	
	Попытка
		ТекущийСклад = Элемент.ТекущиеДанные.Склад;
	Исключение
	КонецПопытки;
	
КонецПроцедуры

&НаКлиенте
Процедура Склады2ПередУдалением(Элемент, Отказ)
	
	Сотрудник = Элементы.Сотрудники2.ТекущаяСтрока;
	
	Для Каждого ИндексСтроки Из Элемент.ВыделенныеСтроки Цикл
		СтрокаСклад = Склады2.НайтиПоИдентификатору(ИндексСтроки);
		УдалитьИнформациюОСотруднике(Сотрудник, СтрокаСклад.Склад);
	КонецЦикла;

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

&НаКлиенте
Процедура Склады2ПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
	
	Сотрудник = Элементы.Сотрудники2.ТекущаяСтрока;
	
	Если Элемент.ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Если Элемент.ТекущиеДанные.Склад <> ТекущийСклад Тогда
		УдалитьИнформациюОСотруднике(Сотрудник, ТекущийСклад);
	КонецЕсли;
	
	ЗаписатьИнформациюОСкладах(Элементы.Склады2.ТекущаяСтрока, Сотрудник);
	
КонецПроцедуры

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

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура РежимРедактированияПриИзменении(Элемент)
	
	Элементы.ГруппаСклады.Видимость     = НЕ РежимРедактированияСклады;
	Элементы.ГруппаСотрудники.Видимость = РежимРедактированияСклады;
	
КонецПроцедуры

&НаКлиенте
Процедура НазначитьРоли(Команда)
	
	ПараметрыОткрытияФормы = Новый Структура;
	ПараметрыОткрытияФормы.Вставить("ЭтоНазначение", Истина);
	
	ОткрытьФорму(
	"Обработка.ДиспетчированиеСборкаИДоставка.Форма.ФормаВыбораРолей", ПараметрыОткрытияФормы
	,
	ЭтотОбъект,,,, Новый ОписаниеОповещения("НазначитьРолиЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры

&НаКлиенте
Процедура СнятьРоли(Команда)
	
	ПараметрыОткрытияФормы = Новый Структура;
	ПараметрыОткрытияФормы.Вставить("ЭтоНазначение", Ложь);
	
	ОткрытьФорму(
	"Обработка.ДиспетчированиеСборкаИДоставка.Форма.ФормаВыбораРолей", ПараметрыОткрытияФормы
	,
	ЭтотОбъект,,,, Новый ОписаниеОповещения("СнятьРолиЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
КонецПроцедуры

&НаКлиенте
Процедура НазначитьРолиСклад(Команда)
	
	ПараметрыОткрытияФормы = Новый Структура;
	ПараметрыОткрытияФормы.Вставить("ЭтоНазначение", Истина);
	
	ОткрытьФорму(
	"Обработка.ДиспетчированиеСборкаИДоставка.Форма.ФормаВыбораРолей", ПараметрыОткрытияФормы
	,
	ЭтотОбъект,,,, Новый ОписаниеОповещения("НазначитьРолиСкладЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
КонецПроцедуры

&НаКлиенте
Процедура СнятьРолиСклад(Команда)
	
	ПараметрыОткрытияФормы = Новый Структура;
	ПараметрыОткрытияФормы.Вставить("ЭтоНазначение", Ложь);
	
	ОткрытьФорму(
	"Обработка.ДиспетчированиеСборкаИДоставка.Форма.ФормаВыбораРолей", ПараметрыОткрытияФормы
	,
	ЭтотОбъект,,,, Новый ОписаниеОповещения("СнятьРолиСкладЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
КонецПроцедуры

&НаКлиенте
Процедура Подбор(Команда)
	
	ОписаниеОповещения = Новый ОписаниеОповещения("ЗавершитьПодборСотрудников", ЭтотОбъект);
	
	ОткрытьФорму(
	"Обработка.ДиспетчированиеСборкаИДоставка.Форма.ФормаПодбораСотрудников",,
	ЭтотОбъект,,,,ОписаниеОповещения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
КонецПроцедуры

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

#Область СлужебныеПроцедурыИФункции

&НаСервере
Процедура ЗаполнитьСотрудников(Склад)
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	СотрудникиМагазинов.Сотрудник КАК Сотрудник,
		|	СотрудникиМагазинов.Курьер КАК Курьер,
		|	СотрудникиМагазинов.Сборщик КАК Сборщик,
		|	СотрудникиМагазинов.Диспетчер КАК Диспетчер
		|ИЗ
		|	РегистрСведений.СотрудникиМагазинов КАК СотрудникиМагазинов
		|ГДЕ
		|	СотрудникиМагазинов.Склад = &Склад";
	
	Запрос.УстановитьПараметр("Склад", Склад);
	
	РезультатЗапроса = Запрос.Выполнить().Выгрузить();
	Сотрудники.Загрузить(РезультатЗапроса);
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьСклады(Сотрудник)
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	СотрудникиМагазинов.Склад КАК Склад,
		|	СотрудникиМагазинов.Курьер КАК Курьер,
		|	СотрудникиМагазинов.Сборщик КАК Сборщик,
		|	СотрудникиМагазинов.Диспетчер КАК Диспетчер
		|ИЗ
		|	РегистрСведений.СотрудникиМагазинов КАК СотрудникиМагазинов
		|ГДЕ
		|	СотрудникиМагазинов.Сотрудник = &Сотрудник";
	
	Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
	
	РезультатЗапроса = Запрос.Выполнить().Выгрузить();
	Склады2.Загрузить(РезультатЗапроса);
	
КонецПроцедуры

&НаКлиенте
Процедура НазначитьРолиЗавершение(Результат, Вт) Экспорт
	
	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Склад = Элементы.Склады.ТекущаяСтрока;
	
	Для Каждого ИндексСтроки Из Элементы.Сотрудники.ВыделенныеСтроки Цикл
		
		СтрокаСотрудник = Сотрудники.НайтиПоИдентификатору(ИндексСтроки);
		
		Если Результат.Диспетчер Тогда
			СтрокаСотрудник.Диспетчер = Истина;
		КонецЕсли;
		
		Если Результат.Сборщик Тогда
			СтрокаСотрудник.Сборщик = Истина;
		КонецЕсли;
		
		Если Результат.Курьер Тогда
			СтрокаСотрудник.Курьер = Истина;
		КонецЕсли;
		
		ЗаписатьИнформациюОСотрудниках(ИндексСтроки, Склад);
		
	КонецЦикла;
	
КонецПроцедуры

&НаКлиенте
Процедура СнятьРолиЗавершение(Результат, Вт) Экспорт
	
	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Склад = Элементы.Склады.ТекущаяСтрока;
	
	Для Каждого ИндексСтроки Из Элементы.Сотрудники.ВыделенныеСтроки Цикл
		
		СтрокаСотрудник = Сотрудники.НайтиПоИдентификатору(ИндексСтроки);
		
		Если Результат.Диспетчер Тогда
			СтрокаСотрудник.Диспетчер = Ложь;
		КонецЕсли;
		
		Если Результат.Сборщик Тогда
			СтрокаСотрудник.Сборщик = Ложь;
		КонецЕсли;
		
		Если Результат.Курьер Тогда
			СтрокаСотрудник.Курьер = Ложь;
		КонецЕсли;
		
		ЗаписатьИнформациюОСотрудниках(ИндексСтроки, Склад);
		
	КонецЦикла;
	
КонецПроцедуры

&НаКлиенте
Процедура НазначитьРолиСкладЗавершение(Результат, Вт) Экспорт
	
	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Сотрудник = Элементы.Сотрудники2.ТекущаяСтрока;
	
	Для Каждого ИндексСтроки Из Элементы.Склады2.ВыделенныеСтроки Цикл
		
		СтрокаСклад = Склады2.НайтиПоИдентификатору(ИндексСтроки);
		
		Если Результат.Диспетчер Тогда
			СтрокаСклад.Диспетчер = Истина;
		КонецЕсли;
		
		Если Результат.Сборщик Тогда
			СтрокаСклад.Сборщик = Истина;
		КонецЕсли;
		
		Если Результат.Курьер Тогда
			СтрокаСклад.Курьер = Истина;
		КонецЕсли;
		
		ЗаписатьИнформациюОСкладах(ИндексСтроки, Сотрудник);
		
	КонецЦикла;
	
КонецПроцедуры

&НаКлиенте
Процедура СнятьРолиСкладЗавершение(Результат, Вт) Экспорт
	
	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Сотрудник = Элементы.Сотрудники2.ТекущаяСтрока;
	
	Для Каждого ИндексСтроки Из Элементы.Склады2.ВыделенныеСтроки Цикл
		
		СтрокаСклад = Склады2.НайтиПоИдентификатору(ИндексСтроки);
		
		Если Результат.Диспетчер Тогда
			СтрокаСклад.Диспетчер = Ложь;
		КонецЕсли;
		
		Если Результат.Сборщик Тогда
			СтрокаСклад.Сборщик = Ложь;
		КонецЕсли;
		
		Если Результат.Курьер Тогда
			СтрокаСклад.Курьер = Ложь;
		КонецЕсли;
		
		ЗаписатьИнформациюОСкладах(ИндексСтроки, Сотрудник);
		
	КонецЦикла;
	
КонецПроцедуры

&НаСервере
Процедура ЗаписатьИнформациюОСотрудниках(ИндексСтроки, Склад)
	
	СтрокаСотрудник = Сотрудники.НайтиПоИдентификатору(ИндексСтроки);
	
	Если СтрокаСотрудник.Сотрудник.Пустая() Тогда
		Возврат;
	КонецЕсли;
	
	НаборЗаписей = РегистрыСведений.СотрудникиМагазинов.СоздатьНаборЗаписей();
	НаборЗаписей.Отбор.Сотрудник.Установить(СтрокаСотрудник.Сотрудник);
	НаборЗаписей.Отбор.Склад.Установить(Склад);
	
	НоваяЗапись = НаборЗаписей.Добавить();
	
	НоваяЗапись.Сотрудник = СтрокаСотрудник.Сотрудник;
	НоваяЗапись.Склад     = Склад;
	НоваяЗапись.Курьер    = СтрокаСотрудник.Курьер;
	НоваяЗапись.Сборщик   = СтрокаСотрудник.Сборщик;
	НоваяЗапись.Диспетчер = СтрокаСотрудник.Диспетчер;
	
	НаборЗаписей.Записать();
	
КонецПроцедуры

&НаСервере
Процедура ЗаписатьИнформациюОСкладах(ИндексСтроки, Сотрудник)
	
	СтрокаСклад = Склады2.НайтиПоИдентификатору(ИндексСтроки);
	
	Если СтрокаСклад.Склад.Пустая() Тогда
		Возврат;
	КонецЕсли;
	
	НаборЗаписей = РегистрыСведений.СотрудникиМагазинов.СоздатьНаборЗаписей();
	НаборЗаписей.Отбор.Сотрудник.Установить(Сотрудник);
	НаборЗаписей.Отбор.Склад.Установить(СтрокаСклад.Склад);
	
	НоваяЗапись = НаборЗаписей.Добавить();
	
	НоваяЗапись.Сотрудник = Сотрудник;
	НоваяЗапись.Склад     = СтрокаСклад.Склад;
	НоваяЗапись.Курьер    = СтрокаСклад.Курьер;
	НоваяЗапись.Сборщик   = СтрокаСклад.Сборщик;
	НоваяЗапись.Диспетчер = СтрокаСклад.Диспетчер;
	
	НаборЗаписей.Записать();
	
КонецПроцедуры

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

&НаСервере
Процедура УдалитьИнформациюОСотруднике(Сотрудник, Склад)
	
	НаборЗаписей = РегистрыСведений.СотрудникиМагазинов.СоздатьНаборЗаписей();
	НаборЗаписей.Отбор.Сотрудник.Установить(Сотрудник);
	НаборЗаписей.Отбор.Склад.Установить(Склад);
	
	НаборЗаписей.Записать();
	
КонецПроцедуры

&НаКлиенте
Процедура ЗавершитьПодборСотрудников(МассивСотрудников, Вт) Экспорт
	
	Склад = Элементы.Склады.ТекущаяСтрока;
	
	Если МассивСотрудников = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Для Каждого ЭлементСотрудник Из МассивСотрудников Цикл
		
		ПараметрыОтбора = Новый Структура("Сотрудник", ЭлементСотрудник);
		Если Сотрудники.НайтиСтроки(ПараметрыОтбора).Количество() > 0 Тогда
			Продолжить;
		КонецЕсли;
		
		НоваяСтрока = Сотрудники.Добавить();
		НоваяСтрока.Сотрудник = ЭлементСотрудник;
		
		ЗаписатьИнформациюОНовомСотруднике(ЭлементСотрудник, Склад);
		
	КонецЦикла;

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

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

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