Варианты комплектации номенклатуры / Форма элемента / Модуль формы

файл
#Область ОписаниеПеременных

&НаКлиенте
Перем КэшированныеЗначения;

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

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	УстановитьУсловноеОформление();

	Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
		Возврат;
	КонецЕсли;

	ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);

	Если Объект.Ссылка.Пустая() Тогда
		ЗаполнитьДанныеФормы();
		НастроитьЭлементыФормы();
	КонецЕсли;

	// Подсистема запрета редактирования ключевых реквизитов объектов.
	ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтаФорма);
	
	НаименованиеЗаполнитьСписокВыбора(Элементы.Наименование, Объект);
	Справочники.УпаковкиЕдиницыИзмерения.ОтобразитьИнформациюОЕдиницеХранения(Объект.Владелец, Элементы.Упаковка);

	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

	СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);

	ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)

	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

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

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)

	// СтандартныеПодсистемы.УправлениеДоступом
	УправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
	// Конец СтандартныеПодсистемы.УправлениеДоступом

	ЗаполнитьДанныеФормы();
	НастроитьЭлементыФормы();

	МодификацияКонфигурацииПереопределяемый.ПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект);

	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

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

&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)

	// СтандартныеПодсистемы.УправлениеДоступом
	УправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
	// Конец СтандартныеПодсистемы.УправлениеДоступом
	
	ЗаполнитьДанныеФормы();
	НастроитьЭлементыФормы();

	// Подсистема запрета редактирования ключевых реквизитов объектов.
	ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтаФорма);

	МодификацияКонфигурацииПереопределяемый.ПослеЗаписиНаСервере(ЭтаФорма, ТекущийОбъект, ПараметрыЗаписи);

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

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
	
	ПараметрыЗаписи.Вставить("ВладелецКомплекта", Объект.Владелец);
	ПараметрыЗаписи.Вставить("Комплект",          Объект.Ссылка);
	ПараметрыЗаписи.Вставить("Основной",          Объект.Основной);
	ПараметрыЗаписи.Вставить("Характеристика",    Объект.Характеристика);
	
	Оповестить("Запись_ВариантыКомплектацииНоменклатуры", ПараметрыЗаписи, Объект.Ссылка);
	
	МодификацияКонфигурацииКлиентПереопределяемый.ПослеЗаписи(ЭтаФорма, ПараметрыЗаписи);

	// СтандартныеПодсистемы.ПодключаемыеКоманды
	Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
		МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
		МодульПодключаемыеКомандыКлиент.ПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи);
	КонецЕсли;
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

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

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

	МодификацияКонфигурацииПереопределяемый.ПередЗаписьюНаСервере(ЭтаФорма, Отказ, ТекущийОбъект, ПараметрыЗаписи);

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

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

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

&НаКлиенте
Процедура ПредставлениеКомпонентаНажатие(Элемент, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	ПоказатьЗначение(Неопределено, Объект.НоменклатураОсновногоКомпонента);
КонецПроцедуры

&НаКлиенте
Процедура ВладелецПриИзменении(Элемент)
	
	ЗаполнитьДанныеФормы();
	НастроитьЭлементыФормы();
	
	НаименованиеЗаполнитьСписокВыбора(Элементы.Наименование, Объект);
	
КонецПроцедуры

&НаКлиенте
Процедура ХарактеристикаПриИзменении(Элемент)
	
	НаименованиеЗаполнитьСписокВыбора(Элементы.Наименование, Объект);

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

&НаКлиенте
Процедура ХарактеристикаОчистка(Элемент, СтандартнаяОбработка)
	
	НаименованиеЗаполнитьСписокВыбора(Элементы.Наименование, Объект);
	
КонецПроцедуры

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

	ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(Объект, СтруктураДействий, КэшированныеЗначения);
	
КонецПроцедуры

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

	ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(Объект, СтруктураДействий, КэшированныеЗначения);
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)

	ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;

	Действия = Новый Структура("
		|ПроверитьХарактеристикуПоВладельцу, ЗаполнитьПризнакВедетсяУчетПоГТД,
		|ПроверитьЗаполнитьУпаковкуПоВладельцу, ПересчитатьКоличествоЕдиниц");
	Действия.ПроверитьХарактеристикуПоВладельцу = ТекущаяСтрока.Характеристика;
	Действия.ПроверитьЗаполнитьУпаковкуПоВладельцу = ТекущаяСтрока.Упаковка;
	Действия.ЗаполнитьПризнакВедетсяУчетПоГТД = Новый Структура("Номенклатура", "ВедетсяУчетПоГТД");
	Действия.ПересчитатьКоличествоЕдиниц = Новый Структура("НужноОкруглять", Ложь);
	
	Действия.Вставить("НоменклатураПриИзмененииПереопределяемый", Новый Структура("ИмяФормы, ИмяТабличнойЧасти",
		ЭтаФорма.ИмяФормы, "Товары"));

	ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, Действия, КэшированныеЗначения);
	
КонецПроцедуры

&НаКлиенте
Процедура ТоварыУпаковкаПриИзменении(Элемент)

	ТекущаяСтрока = Элементы.Товары.ТекущиеДанные; 
	
	СтруктураДействий = Новый Структура;
	СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц", Новый Структура("НужноОкруглять", Ложь));

	ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока,СтруктураДействий,КэшированныеЗначения);

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

&НаКлиенте
Процедура ТоварыКоличествоУпаковокПриИзменении(Элемент)

	ТекущаяСтрока = Элементы.Товары.ТекущиеДанные; 
	
	СтруктураДействий = Новый Структура;
	СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц", Новый Структура("НужноОкруглять", Ложь));
	
	ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока,СтруктураДействий,КэшированныеЗначения);

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

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

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

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

// Обработчик команды, создаваемой механизмом запрета редактирования ключевых реквизитов.
//
&НаКлиенте
Процедура Подключаемый_РазрешитьРедактированиеРеквизитовОбъекта(Команда)
	
	ОбщегоНазначенияУТКлиент.РазрешитьРедактированиеРеквизитовОбъекта(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура Заполнить(Команда)

	ЗаполнитьПоКомплектующим();

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

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

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

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

&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
	
	СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
	
КонецПроцедуры

// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
	ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры

&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт
	ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

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

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

&НаСервере
Процедура УстановитьУсловноеОформление()

	УсловноеОформление.Элементы.Очистить();

	//

	НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(ЭтаФорма);

	//

	НоменклатураСервер.УстановитьУсловноеОформлениеЕдиницИзмерения(ЭтаФорма);

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

#Область Прочее

&НаКлиенте
Процедура ЗаполнитьПоКомплектующим()

	Если Объект.Товары.Количество() > 0 Тогда

		Ответ = Неопределено;


		ПоказатьВопрос(Новый ОписаниеОповещения("ЗаполнитьПоКомплектующимПослеВопроса", ЭтотОбъект), НСтр("ru = 'Перед заполнением табличная часть будет очищена. Заполнить?'"),
						РежимДиалогаВопрос.ДаНет,,
						КодВозвратаДиалога.Да,);
        Возврат;

	КонецЕсли;

	ЗаполнитьПоКомплектующимФрагмент();
КонецПроцедуры

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

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

&НаКлиенте
Процедура ЗаполнитьПоКомплектующимФрагмент()

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

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

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура НаименованиеЗаполнитьСписокВыбора(Элемент, Объект)
	
	Элемент.СписокВыбора.Очистить();
	
	Представление = СокрЛП(Объект.Владелец);
	Если ЗначениеЗаполнено(Объект.Характеристика) Тогда
		Представление = Представление + " " + СокрЛП(Объект.Характеристика);
	КонецЕсли;
	
	Элемент.СписокВыбора.Добавить(Представление);
	
КонецПроцедуры

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

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

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