Отчет комиссионера (агента) о продажах / Модуль объекта

файл
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс

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

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

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

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

Процедура ПриКопировании(ОбъектКопирования)

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

	СтруктураЗаполненияСтавкиНДС = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияСтавкиНДС(ЭтотОбъект);
	СтруктураЗаполненияСтавкиНДС.ЗаполнениеНаОснованииКопирование = Истина;

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

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

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

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

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

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

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

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

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

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

Процедура ПриЗаписи(Отказ)
	
	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;
	
	ПроведениеДокументов.ПриЗаписиДокумента(ЭтотОбъект, Отказ);
	
	ОтчетКомиссионераЛокализация.ПриЗаписи(ЭтотОбъект, Отказ);

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

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

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

#Область ИнициализацияИЗаполнение

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

Процедура ЗаполнитьУсловияПродажПоУмолчанию(КэшированныеЗначенияПараметров = Неопределено) Экспорт
	
	ИспользоватьСоглашенияСКлиентами = ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами");

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

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

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

Процедура ИнициализироватьУсловияПродаж()
	
	Если Не ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами") Тогда
		ЗаполнитьУсловияПродажПоУмолчанию();
	КонецЕсли;
	
КонецПроцедуры

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

#Область ВидыЗапасов

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

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

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

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

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

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

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

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

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

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

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

#КонецЕсли

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