Отчет о розничных возвратах / Форма документа / Модуль формы

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

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

&НаКлиенте
Перем ТекущиеДанныеИдентификатор; // используется механизмом серий

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

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

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

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

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

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

	// Обработчик подсистемы "ВерсионированиеОбъектов"
	ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);

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

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

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

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

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

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

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

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

	// СтандартныеПодсистемы.РаботаСФайлами
	РаботаСФайламиКлиент.ПриОткрытии(ЭтотОбъект, Отказ);
	// Конец СтандартныеПодсистемы.РаботаСФайлами
КонецПроцедуры

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

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

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

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

	Если ИсточникВыбора.ИмяФормы = "Обработка.ПодборТоваровВДокументПродажи.Форма.Форма" Тогда
		ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение);
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Если Не Элемент.ТекущийЭлемент = Элементы.ТоварыНомерГТД Тогда
		Возврат;
	КонецЕсли;

	Если Элемент.ТекущийЭлемент = Элементы.ТоварыНомерГТД Тогда
		
		ЗакупкиКлиент.ЗаполнитьСписокВыбораНомеровГТД(
			Элементы.Товары.ТекущиеДанные, Элементы.ТоварыНомерГТД.СписокВыбора);
		
	КонецЕсли;

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

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

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

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

	Если Не ТекущаяСтрока.ВедетсяУчетПоГТД Тогда
		ТекущаяСтрока.НомерГТД = Неопределено;
		ТекущаяСтрока.ТипНомераГТД = Неопределено;
		ТекущаяСтрока.СтранаПроисхождения = Неопределено;
	КонецЕсли;

	РассчитатьИтоговыеПоказателиОтчетаОРозничныхВозвратах(ЭтотОбъект);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПоискПоШтрихкодуЗавершение(ДанныхШтрихкода, ДополнительныеПараметры) Экспорт
	
	ОбработатьШтрихкоды(ДанныхШтрихкода);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	//

	ЗапасыСервер.УстановитьУсловноеОформлениеПодразделенияДляВидовЗапасов(ЭтотОбъект);

	//

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

	//

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

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

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

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

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

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

	//

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

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

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

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);

	//++ Локализация
	
	Элемент = УсловноеОформление.Элементы.Добавить();

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

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

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
	
	//
	
	НоменклатураСервер.УстановитьУсловноеОформлениеСерийНоменклатуры(ЭтотОбъект, Ложь);

	//

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

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

	ПолеЭлемента = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыНомерГТД.Имя);

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

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

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

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

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

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

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

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

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

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

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

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОплатаПлатежнымиКартамиДоговорПодключения.Имя);

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.НезаполненноеПолеТаблицы);
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<не требуется>'"));
	Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);

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

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОплатаПлатежнымиКартамиЭквайринговыйТерминал.Имя);

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.НезаполненноеПолеТаблицы);
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<не требуется>'"));
	Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);

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

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОплатаПлатежнымиКартамиЭквайринговыйТерминал.Имя);
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОплатаПлатежнымиКартамиДоговорПодключения.Имя);

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

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

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

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

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

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

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

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

#Область ШтрихкодыИТорговоеОборудование

&НаКлиенте
Процедура ОбработатьШтрихкоды(ДанныеШтрихкодов)

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ОткрытьПодборСерийПриСканированииШтрихкодаНоменклатуры()

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

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

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

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

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

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

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

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

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

#Область Наборы

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

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

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

&НаСервере
Функция АдресНабораВоВременномХранилище(Параметры)
	
	Возврат НаборыСервер.АдресНабораВоВременномХранилище(ЭтотОбъект, Параметры, "Товары");
	
КонецФункции

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

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

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

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

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

	СтруктураДействий.Вставить("ПроверитьХарактеристикуПоВладельцу");
	СтруктураДействий.Вставить("ПроверитьЗаполнитьУпаковкуПоВладельцу");

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

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

&НаСервере
Процедура ОбновитьВидимостьЭлементов(КассаФискальныйРегистратор)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ЗаполнитьРеквизитыПриИзмененииЭлементаНаСервереЛокализация(Элемент)
	
	//++ Локализация
	Если Элемент = Элементы.КассаККМ Или Элемент = Элементы.Склад Тогда
		Объект.ОрганизацияЕГАИС = ИнтеграцияЕГАИСУТ.ОрганизацияЕГАИСПоОрганизацииИСкладу(Объект.Организация, Объект.Склад);
	КонецЕсли;
	//-- Локализация
	
КонецПроцедуры

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

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

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

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