Номера ГТД / Форма элемента / Модуль формы

файл

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура КодПриИзменении(Элемент)
	
	ОбработатьИзменениеКода();
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура НаименованиеТовараПриИзменении(Элемент)
	
	Если Не ПустаяСтрока(Объект.НаименованиеТовара) Тогда
		Объект.НаименованиеТовара = СокрЛП(Объект.НаименованиеТовара);
	КонецЕсли;
	
КонецПроцедуры

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

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыПрослеживаемыеКомплектующие

&НаКлиенте
Процедура ПрослеживаемыеКомплектующиеПослеУдаления(Элемент)
	
	Если Объект.ПрослеживаемыеКомплектующие.Количество() = 0 Тогда
		Объект.Код = "";
	КонецЕсли;
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ПрослеживаемыеКомплектующиеКодАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
	
	ЗакупкиКлиент.НомераГТДКодКомплектующейАвтоПодбор(Текст, ДанныеВыбора, СтандартнаяОбработка, Объект.Ссылка);
	
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура ЗаписатьДанные(Команда)
	
	ВыполнитьПроверкуПередЗаписьюИЗаписать();
	
КонецПроцедуры

&НаКлиенте
Процедура ЗаписатьДанныеИЗакрыть(Команда)
	
	Отказ = Ложь;
	
	ВыполнитьПроверкуПередЗаписьюИЗаписать(Отказ);
	
	Если Не Отказ Тогда
		Закрыть();
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

#Область ОбработкаОбъектаПередЗаписью

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

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

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

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

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

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

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

&НаКлиенте
Процедура ЗаписатьЭлемент(Отказ)
	
	Если Не Отказ Тогда
		КонтрольУникальностиПроведен = Истина;
		
		Попытка
			Если Не Записать() Тогда
				Отказ = Истина;
			КонецЕсли;
		Исключение
			Отказ = Истина;
			КонтрольУникальностиПроведен = Ложь;
			
			Возврат;
		КонецПопытки;
		
		Если Отказ Тогда
			КонтрольУникальностиПроведен = Ложь;
			
			Возврат;
		КонецЕсли;
	
	КонецЕсли;
	
КонецПроцедуры

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

#Область ПриИзмененииРеквизитов

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

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

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

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

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

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

&НаСервере
Процедура ИнициализироватьДанныеСоздания(ДанныеСоздания, ПараметрыСоздания)
	
	Для Каждого КлючИЗначение Из ПараметрыСоздания Цикл
		Если ДанныеСоздания.Свойство(КлючИЗначение.Ключ)
			И ТипЗнч(ДанныеСоздания[КлючИЗначение.Ключ]) = ТипЗнч(КлючИЗначение.Значение) Тогда
			
			ДанныеСоздания[КлючИЗначение.Ключ] = КлючИЗначение.Значение;
			
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры

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

&НаКлиентеНаСервереБезКонтекста
Функция ЕдиницаИзмеренияСтоимости(ТипНомераГТД, ЕдиницаИзмерения)
	
	ЕдиницаИзмеренияСтоимости = ?(ТипНомераГТД = ПредопределенноеЗначение("Перечисление.ТипыНомеровГТД.НомерРНПТ"),
									ЕдиницаИзмерения,
									ПредопределенноеЗначение("Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка"));
	
	Возврат ЕдиницаИзмеренияСтоимости;
	
КонецФункции

&НаСервере
Процедура ЗаполнитьЕдиницуИзмеренияТНВЭДПоУмолчанию()
	
	Если ЗначениеЗаполнено(ЕдиницаИзмеренияТНВЭД) Тогда
		Возврат;
	КонецЕсли;
	
	ДанныеКлассификатора	= Справочники.УпаковкиЕдиницыИзмерения.ЗаполнитьЕдиницыИзмеренияИзКлассификатора("796");
	ЕдиницаИзмеренияТНВЭД	= ДанныеКлассификатора["796"];
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьСлужебныеДанныеПрослеживаемыхКомплектующих()
	
	Комплектующие = Объект.ПрослеживаемыеКомплектующие;
	
	Если Комплектующие.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	Комплектующие.НомерСтроки КАК НомерСтроки,
	|	ВЫРАЗИТЬ(Комплектующие.НомерРНПТ КАК Справочник.НомераГТД) КАК НомерРНПТ
	|ПОМЕСТИТЬ ВТКомплектующие
	|ИЗ
	|	&Комплектующие КАК Комплектующие
	|
	|ГДЕ
	|	Комплектующие.НомерРНПТ <> ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка)
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	Комплектующие.НомерСтроки КАК НомерСтроки,
	|	ИСТИНА КАК СтатусНомераРНПТ,
	|	ЕСТЬNULL(Комплектующие.НомерРНПТ.Код, """") КАК Код
	|ИЗ
	|	ВТКомплектующие КАК Комплектующие
	|
	|УПОРЯДОЧИТЬ ПО
	|	НомерСТроки";
	
	Запрос.УстановитьПараметр("Комплектующие", Комплектующие.Выгрузить(, "НомерСтроки, НомерРНПТ"));
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Если РезультатЗапроса.Пустой() Тогда
		Возврат;
	КонецЕсли;
	
	Выборка = РезультатЗапроса.Выбрать();
	
	ЗаполняемыеСвойства = "СтатусНомераРНПТ, Код";
	
	Пока Выборка.Следующий() Цикл
		ЗаполнитьЗначенияСвойств(Комплектующие[Выборка.НомерСтроки - 1], Выборка, ЗаполняемыеСвойства);
	КонецЦикла;
	
КонецПроцедуры

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

// Параметры:
//	Форма - ФормаКлиентскогоПриложения - форма элемента справочника.
//
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьЗаголовокФормы(Форма)
	
	Объект = Форма.Объект;
	
	Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
		ШаблонЗаголовка = НСтр("ru = '%1 (Номер грузовой таможенной декларации)'");
		
		Если Форма.ИспользоватьУчетПрослеживаемыхИмпортныхТоваров Тогда
			Если Объект.ТипНомераГТД = ПредопределенноеЗначение("Перечисление.ТипыНомеровГТД.НомерРНПТ") Тогда
				ШаблонЗаголовка = НСтр("ru = '%1 (Номер РНПТ)'");
			ИначеЕсли Объект.ТипНомераГТД = ПредопределенноеЗначение("Перечисление.ТипыНомеровГТД.НомерРНПТКомплекта") Тогда
				ШаблонЗаголовка = НСтр("ru = '%1 (Номер РНПТ комплекта)'");
			КонецЕсли;
		КонецЕсли;
		
		ТекстЗаголовка = СтрШаблон(ШаблонЗаголовка, СокрЛП(Строка(Объект.Ссылка)));
	Иначе
		ТекстЗаголовка = НСтр("ru = 'Номер грузовой таможенной декларации (создание)'");
		
		Если Форма.ИспользоватьУчетПрослеживаемыхИмпортныхТоваров Тогда
			Если Объект.ТипНомераГТД = ПредопределенноеЗначение("Перечисление.ТипыНомеровГТД.НомерРНПТ") Тогда
				ТекстЗаголовка = НСтр("ru = 'Номер РНПТ (создание)'");
			ИначеЕсли Объект.ТипНомераГТД = ПредопределенноеЗначение("Перечисление.ТипыНомеровГТД.НомерРНПТКомплекта") Тогда
				ТекстЗаголовка = НСтр("ru = 'Номер РНПТ комплекта (создание)'");
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	
	Форма.Заголовок = ТекстЗаголовка;
	
КонецПроцедуры

&НаСервере
Процедура СформироватьПредставлениеНомераТД()
	
	ТаможеннаяДекларация = "";
	
	Если ПравоДоступа("Просмотр", Метаданные.Документы.ТаможеннаяДекларацияИмпорт) Тогда
		Если Не Объект.СтранаВвозаНеРФ
			И ЗначениеЗаполнено(Объект.РегистрационныйНомер) Тогда
			
			ТаможеннаяДекларацияСсылка = Документы.ТаможеннаяДекларацияИмпорт.НайтиПоРеквизиту(
											"НомерДекларации",
											Объект.РегистрационныйНомер);
			
			Если Не ТаможеннаяДекларацияСсылка.Пустая() Тогда
				ТаможеннаяДекларация = ПолучитьНавигационнуюСсылку(ТаможеннаяДекларацияСсылка);
			КонецЕсли;
			
		КонецЕсли;
	КонецЕсли;
	
	Если ЗначениеЗаполнено(ТаможеннаяДекларация)
		И ЗначениеЗаполнено(Объект.РегистрационныйНомер) Тогда
		
		Часть1 = Новый ФорматированнаяСтрока(НСтр("ru = 'Зарегистрирована декларация:'") + " ");
		Часть2 = Новый ФорматированнаяСтрока(Объект.РегистрационныйНомер, , , , ТаможеннаяДекларация);
		
		Элементы.ПредставлениеНомераТД.Заголовок = Новый ФорматированнаяСтрока(Часть1, Часть2);
		Элементы.ПредставлениеНомераТД.Видимость = Истина;
		
	Иначе
		Элементы.ПредставлениеНомераТД.Видимость = Ложь;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьПредставлениеЕдиницыИзмеренияСтоимости(ПредставлениеЭлемента, Валюта, ЕдиницаИзмеренияТНВЭД)
	
	ЕдиницаИзмеренияПредставление = ?(ЗначениеЗаполнено(ЕдиницаИзмеренияТНВЭД),
										СокрЛП(Строка(ЕдиницаИзмеренияТНВЭД)),
										НСтр("ru = 'единицу'"));
	
	ТекстПредставления		= НСтр("ru = '%1 за %2'");
	ПредставлениеЭлемента	= СтрШаблон(ТекстПредставления, СокрЛП(Строка(Валюта)), ЕдиницаИзмеренияПредставление);
	
КонецПроцедуры

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

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

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

// Параметры:
//	ТекущаяСтрока - ДанныеФормыЭлементКоллекции - строка табличной части, которая содержит следующие свойства:
//		* НомерСтроки - Число - номер строки табличной части.
//
&НаКлиенте
Процедура УстановитьКодПоПервойСтрокеКомплектующих(ТекущаяСтрока)
	
	Если ТекущаяСтрока.НомерСтроки = 1 Тогда
		Если Объект.Код <> ТекущаяСтрока.Код Тогда
			Объект.Код = ТекущаяСтрока.Код;
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция РегистрационныйНомерИСтранаВвоза(ТекущийТекстНомераДекларации)
	
	Возврат Справочники.НомераГТД.РегистрационныйНомерИСтранаВвоза(ТекущийТекстНомераДекларации);
	
КонецФункции

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

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

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

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

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

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