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

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

&НаКлиенте
Перем КэшированныеЗначения; // используется механизмом обработки изменения реквизитов ТЧ

&НаКлиенте
Перем КешРазделов; // используется для обработок связи между разделами и товарами
&НаКлиенте
Перем СтарыйНомерРаздела; // поддержка редактирования номера раздела
&НаКлиенте
Перем НовыйНомерРаздела; // поддержка редактирования номера раздела

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

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

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

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

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

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

	// СтандартныеПодсистемы.РаботаСФайлами
	ПараметрыГиперссылки = РаботаСФайлами.ГиперссылкаФайлов();
	ПараметрыГиперссылки.Размещение = "КоманднаяПанель";
	РаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыГиперссылки);
	// Конец СтандартныеПодсистемы.РаботаСФайлами

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура СоглашениеПриИзменении(Элемент)
	СоглашениеПриИзмененииСервер();
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура СтатьяРасходовШтрафПриИзменении(Элемент)
	
	ДоходыИРасходыКлиентСервер.СтатьяПриИзменении(ЭтотОбъект, Элемент);	
	
КонецПроцедуры

&НаКлиенте
Процедура СтатьяРасходовШтрафНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	ДоходыИРасходыКлиент.НачалоВыбораСтатьи(ЭтотОбъект, Элемент, СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура АналитикаРасходовСборНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	ДоходыИРасходыКлиент.НачалоВыбораАналитикиРасходов(ЭтотОбъект, Элемент, СтандартнаяОбработка);
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура АналитикаРасходовШтрафНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	ДоходыИРасходыКлиент.НачалоВыбораАналитикиРасходов(ЭтотОбъект, Элемент, СтандартнаяОбработка);
	
КонецПроцедуры


&НаКлиенте
Процедура АналитикаРасходовШтрафАвтоПодбор(Элемент, Текст, ДанныеВыбора, Параметры, Ожидание, СтандартнаяОбработка)
	
	ДоходыИРасходыКлиент.АвтоПодборАналитикиРасходов(ЭтотОбъект, Элемент, Текст, ДанныеВыбора, Параметры, СтандартнаяОбработка);	
	
КонецПроцедуры

&НаКлиенте
Процедура АналитикаРасходовШтрафОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, Параметры, СтандартнаяОбработка)
	
	ДоходыИРасходыКлиент.ОкончаниеВводаТекстаАналитикиРасходов(ЭтотОбъект, Элемент, Текст, ДанныеВыбора, Параметры, СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура НаправлениеДеятельностиПриИзменении(Элемент)
	
	НаправлениеДеятельностиПриИзмененииСервер();
	
КонецПроцедуры

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

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

	ОбновитьДанныеСтрокиПриИзмененииПорядковогоНомераТовара(ТекущаяСтрока, Объект);
		
КонецПроцедуры

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

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

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

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

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

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

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

&НаКлиенте
Процедура РазделыПриАктивизацииСтроки(Элемент)
	ПодключитьОбработчикОжидания("АктивироватьРаздел", 0.2, Истина);
КонецПроцедуры

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

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

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

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

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

&НаКлиенте
Процедура РазделыНомерРазделаПриИзменении(Элемент)
	НовыйНомерРаздела = Элементы.Разделы.ТекущиеДанные.НомерРаздела;
	Если НомерРазделаУникальный(Объект.Разделы, НовыйНомерРаздела) Тогда
				
		// меняем номер раздела у связанных товаров
		ЗаполнитьПоляТабчасти("Товары", Новый Структура("НомерРаздела", НовыйНомерРаздела), Новый Структура("НомерРаздела", СтарыйНомерРаздела));
		// удалим старый номер раздела из списка выбора разделов в товарах
		ЗаменитьЭлементВСпискеВыбора(
			Элементы.ТоварыНомерРаздела.СписокВыбора, СтарыйНомерРаздела, НовыйНомерРаздела, Элементы.ТоварыНомерРаздела.Формат);
		
		АктивироватьРаздел();	
	Иначе
		Элементы.Разделы.ТекущиеДанные.НомерРаздела = СтарыйНомерРаздела;
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
			СтрЗаменить(НСтр("ru = 'Раздел №%1 уже существует. Укажите другой номер раздела'"), "%1", НовыйНомерРаздела),
			Объект.Ссылка,
			"Разделы[" + (Элементы.Разделы.ТекущиеДанные.НомерСтроки - 1) + "].НомерРаздела",);
	КонецЕсли;
	НовыйНомерРаздела = Элементы.Разделы.ТекущиеДанные.НомерРаздела;
КонецПроцедуры

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

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

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

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

&НаКлиенте
Процедура ПровестиДокумент(Команда)
	
	ОбщегоНазначенияУТКлиент.Провести(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура ПровестиИЗакрыть(Команда)
	
	ОбщегоНазначенияУТКлиент.ПровестиИЗакрыть(ЭтаФорма);
	
КонецПроцедуры

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

&НаКлиенте
Процедура РассчитатьПоТоварам(Команда)
	Если Объект.Товары.Количество() > 0 И Объект.Разделы.Количество() > 0 Тогда
		РассчитатьПоТоварамСервер();
	КонецЕсли;
КонецПроцедуры

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ЗаполнитьСтоимостьВыделенныхСтрок(Команда)
	Перем ВидЦены;
	ДляНезаполненныхСтрок = Ложь;
	ВыбратьВидЦеныПоставщика(ВидЦены,ДляНезаполненныхСтрок);
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьСтоимостьНезаполненныхСтрок(Команда)
	Перем ВидЦены;
	ДляНезаполненныхСтрок = Истина;
	ВыбратьВидЦеныПоставщика(ВидЦены,ДляНезаполненныхСтрок);
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ЗачетОплаты(Команда)
	
	ПоместитьРасшифровкуПлатежаВоВременноеХранилище();
	ВзаиморасчетыКлиент.ЗачетОплаты(ЭтаФорма, Элементы.ЗачетОплатыФорма);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

// СтандартныеПодсистемы.Свойства

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

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

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

// Конец СтандартныеПодсистемы.Свойства

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

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

	//

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

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СтатьяРасходовСбор.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ТаможенныйСбор");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
	ОтборЭлемента.ПравоеЗначение = 0;

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

	//

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

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СтатьяРасходовСбор.Имя);

	ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
	ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;

	ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ТаможенныйСбор");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = 0;

	ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.СтатьяРасходовСбор");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;

	Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);

	//

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

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СтатьяРасходовШтраф.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ТаможенныйШтраф");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
	ОтборЭлемента.ПравоеЗначение = 0;

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

	//

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

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СтатьяРасходовШтраф.Имя);
	
	ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
	ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;

	ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ТаможенныйШтраф");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = 0;

	ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.СтатьяРасходовШтраф");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;

	Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);

	//

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

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.РазделыСуммаПошлины.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Разделы.СтавкаПошлины");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
	ОтборЭлемента.ПравоеЗначение = 0;

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Разделы.СуммаПошлины");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = 0;

	Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Истина);

	//

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

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.РазделыСуммаПошлины.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Разделы.СтавкаПошлины");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = 0;

	Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
	
	//
	
	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыСуммаАкциза.Имя);

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

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.РазделыСуммаАкциза.Имя);
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыСуммаАкциза.Имя);

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

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.РазделыСуммаАкциза.Имя);
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыСуммаАкциза.Имя);

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

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

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

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

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

&НаСервере
Процедура ПересчетКурсаВалютыСервер()

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

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

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

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

			НайденныеСтроки[0].ТаможеннаяСтоимость = НайденныеСтроки[0].ТаможеннаяСтоимость + СуммаКРаспределению - ТаблицаТаможеннойСтоимости[0].ТаможеннаяСтоимость;
			ОбрабатываемыеСтроки.Добавить(НайденныеСтроки[0]);
			ПересчитатьПоля(НайденныеСтроки[0], "СуммаПошлины, СуммаНДС", ДанныеРаздела, Объект.ИспользоватьРазделы);
		КонецЦикла; 

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

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

&НаСервере
Функция ЕстьСтрокиОтличнойВалюты()

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

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

&НаСервере
Процедура КонтрагентПоставщикаПриИзмененииСервер()
	
	ОбновитьИнформациюПоПоступлениям();
	
КонецПроцедуры

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

&НаСервере
Процедура ВариантОформленияПриИзмененииСервер(ВалютаИзменена)
		
	ЗаполнитьДанныеФормы();
	
	Если РасчетыСТаможней Тогда

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

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

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

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

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

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


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

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

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

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

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

#Область ОбработкаКомандФормыНаСервере

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

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

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

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

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

#Область ПоддержкаТаблицФормы

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

&НаКлиентеНаСервереБезКонтекста
Функция НовыйНомерРаздела(Разделы)
	МаксимальныйНомер = 0;
	Для Каждого Раздел Из Разделы Цикл
		Если Раздел.НомерРаздела > МаксимальныйНомер Тогда
			МаксимальныйНомер = Раздел.НомерРаздела;
		КонецЕсли;
	КонецЦикла;
	Возврат МаксимальныйНомер + 1;
КонецФункции

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ДанныеПустогоРаздела()
	
	СтруктураВозврата = Новый Структура;
	СтруктураВозврата.Вставить("НомерРаздела",        0);
	СтруктураВозврата.Вставить("СтавкаПошлины",       0.);
	СтруктураВозврата.Вставить("СтавкаНДС",           Неопределено);
	СтруктураВозврата.Вставить("Склад",               Неопределено);
	СтруктураВозврата.Вставить("СтранаПроисхождения", Неопределено);
	
	Возврат СтруктураВозврата;
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Процедура ПересчитатьПоля(ТекущиеДанные, Знач ПоляПересчета, Знач ДанныеРаздела, Знач ИспользоватьРазделы)
	
	ПоляПересчета = НРег(ПоляПересчета);
	Если СтрНайти(ПоляПересчета, "суммапошлины")>0 Тогда
		Если ИспользоватьРазделы Тогда
			ТекущиеДанные.СтавкаПошлины = ДанныеРаздела.СтавкаПошлины;
		КонецЕсли;
		ТекущиеДанные.СуммаПошлины = ТекущиеДанные.ТаможеннаяСтоимость * ТекущиеДанные.СтавкаПошлины / 100.;
	ИначеЕсли СтрНайти(ПоляПересчета, "ставкапошлины")>0 Тогда
		ТекущиеДанные.СтавкаПошлины =
			100. * ?(ТекущиеДанные.ТаможеннаяСтоимость=0., 0., ТекущиеДанные.СуммаПошлины / ТекущиеДанные.ТаможеннаяСтоимость);
	КонецЕсли;
	Если СтрНайти(ПоляПересчета, "суммандс")>0 Тогда
		Если ИспользоватьРазделы Тогда
			ТекущиеДанные.СтавкаНДС = ДанныеРаздела.СтавкаНДС;
		КонецЕсли;
		ТекущиеДанные.СуммаНДС =
			ЦенообразованиеКлиентСервер.РассчитатьСуммуНДС(
				ТекущиеДанные.ТаможеннаяСтоимость + ТекущиеДанные.СуммаПошлины + ТекущиеДанные.СуммаАкциза,
				ТекущиеДанные.СтавкаНДС,
				Ложь);
	КонецЕсли;
КонецПроцедуры

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

&НаКлиентеНаСервереБезКонтекста
Функция НомерРазделаУникальный(Разделы, НомерРаздела)
	НомерВстречался = Ложь;
	Для Каждого Раздел Из Разделы Цикл
		Если НомерВстречался И (Раздел.НомерРаздела = НомерРаздела) Тогда
			Возврат Ложь;
		КонецЕсли;
		НомерВстречался = НомерВстречался Или (Раздел.НомерРаздела = НомерРаздела);
	КонецЦикла;
	Возврат Истина;
КонецФункции

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

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

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

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

#Область Серии

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

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

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

&НаСервере
Функция ПоместитьВХранилище(ИмяТабчасти, ИменаПолей, ПараметрыОтбора)
	Возврат ПоместитьВоВременноеХранилище(Объект[ИмяТабчасти].Выгрузить(ПараметрыОтбора, ИменаПолей), УникальныйИдентификатор);
КонецФункции

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

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

&НаКлиентеНаСервереБезКонтекста
Функция РазностиИтогов(Разделы, Товары)
	Возврат Новый Структура("РазностьСтоимостей, РазностьПошлин, РазностьНДС",
		Разделы.Итог("ТаможеннаяСтоимость") - Товары.Итог("ТаможеннаяСтоимость"),
		Разделы.Итог("СуммаПошлины") - Товары.Итог("СуммаПошлины"),
		Разделы.Итог("СуммаНДС") - Товары.Итог("СуммаНДС")); // клиент-серверные оптимизации
КонецФункции

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

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

&НаСервере
Процедура ЗаполнитьДополнительныеПризнакиТоваров()
	Действия = Новый Структура;
	УстановитьДействияДополнительныхПризнаковТоваров(Действия);
	ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Объект.Товары, Действия, Неопределено);
КонецПроцедуры

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

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

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

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

&НаКлиенте
Функция ДатаДокумента(ОбъектДата)
	Возврат ?(ЗначениеЗаполнено(ОбъектДата), ОбъектДата, ОбщегоНазначенияКлиент.ДатаСеанса());
КонецФункции

&НаСервере
Функция ДатаДокументаСервер(ОбъектДата)
	Возврат ?(ЗначениеЗаполнено(ОбъектДата), ОбъектДата, ТекущаяДатаСеанса());
КонецФункции

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

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

&НаКлиенте
Процедура УстановитьСтоимость(ВидЦеныПоставщика, ДляНезаполненныхСтрок)
	Если ДляНезаполненныхСтрок Тогда
		УстановитьСтоимостьСервер(ВидЦеныПоставщика, Новый Структура("ТаможеннаяСтоимость", 0.));
	Иначе
		УстановитьСтоимостьСервер(ВидЦеныПоставщика);
	КонецЕсли;
КонецПроцедуры

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

&НаКлиентеНаСервереБезКонтекста
Функция НомерДляСФ(НомерДекларации, НомерДополнения)
	НомерДляСФ = НомерДекларации;
	Если ЗначениеЗаполнено(НомерДополнения) Тогда
		НомерДляСФ = НомерДекларации + "/" + НомерДополнения;
	КонецЕсли;	
	Возврат НомерДляСФ;
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

#Область РаботаСБуферомОбмена

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

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

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

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

&НаСервере
Процедура ОбновитьСуммуДокументаНаФорме()
	СуммаДокумента = Документы.ТаможеннаяДекларацияИмпорт.СуммаДокумента(Объект);
КонецПроцедуры

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

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

#Область СтандартныеМеханизмыБсп

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

&НаСервере
Процедура ОбновитьЭлементыДополнительныхРеквизитов()
	УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтаФорма);
КонецПроцедуры


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

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

#Область Локализация 

&НаСервере
Процедура ДополнитьУсловноеОформлениеЛокализация()
	
	//++ Локализация
	
	//-- Локализация
	
КонецПроцедуры

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

&НаКлиенте
Процедура УстановитьНомерДляСФИзНомераСтрокиТовара(Команда)
	//++ Локализация
	ОценкаПроизводительностиКлиент.ЗамерВремени(
		"Документ.ТаможеннаяДекларацияИмпорт.Форма.ФормаДокумента.УстановитьНомерДляСФИзНомераСтрокиТовара");
			
	ИнициироватьЗаполнениеНомераДляСФ(Истина, "НомерСтроки");
	//-- Локализация
КонецПроцедуры

&НаКлиенте
Процедура УстановитьНомерДляСФИзРаздела(Команда)
	//++ Локализация
	ОценкаПроизводительностиКлиент.ЗамерВремени(
		"Документ.ТаможеннаяДекларацияИмпорт.Форма.ФормаДокумента.УстановитьНомерДляСФИзРаздела");	
	ИнициироватьЗаполнениеНомераДляСФ(Истина, "НомерРаздела");
	//-- Локализация
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ЗаполнитьНомерДляСФ(ТекущийРаздел, ИмяПоляДополнения = "ПорядковыйНомерТовара")

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

//-- Локализация

&НаСервере
Процедура ПоместитьРасшифровкуПлатежаВоВременноеХранилище()
	ВзаиморасчетыСервер.ПоместитьРасшифровкуПлатежаВоВременноеХранилище(ЭтаФорма);
КонецПроцедуры

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


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