Реализация товаров и услуг / Модуль объекта

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

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

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

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

// Заполняет аналитики учета номенклатуры. Используется в отчете ОстаткиТоваровОрганизаций.
//
Процедура ЗаполнитьАналитикиУчетаНоменклатуры() Экспорт
	
	ЗаполнитьАналитикиУчетаНоменклатурыВТабличныхЧастяхТоваров();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

			ЗаполнитьДокументПоОтбору(ДанныеЗаполнения);

		КонецЕсли;

	ИначеЕсли ТипДанныхЗаполнения = Тип("СправочникСсылка.СделкиСКлиентами") Тогда

		ЗаполнитьДокументНаОснованииСделкиПоПродаже(ДанныеЗаполнения);

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

		ЗаполнитьДокументНаОснованииИндивидуальногоСоглашенияСКлиентом(ДанныеЗаполнения);

	ИначеЕсли ТипДанныхЗаполнения = Тип("ДокументСсылка.ВозвратТоваровОтКлиента") Тогда

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

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

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

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

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

		ТекстОшибки = НСтр("ru = 'Переход права собственности должен формироваться только по распоряжению.'");

		ОбщегоНазначения.СообщитьПользователю(
			ТекстОшибки,,
			"Объект.РеализацияПоЗаказам",,
			Отказ);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Процедура ЗаполнитьДокументНаОснованииВозвратаТоваровОтКлиента(Знач ДокументОснование)

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

	ОбщегоНазначенияУТ.ПроверитьВозможностьВводаНаОсновании(
		Выборка.Ссылка,
		,
		Выборка.ЕстьОшибкиПроведен,);

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

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

Процедура ЗаполнитьДокументПоОтбору(Знач ДанныеЗаполнения)

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

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

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

	Если ИспользованиеСкладов.ИспользуютсяСкладыЗакупки И Не ИспользованиеСкладов.ИспользуютсяСкладыПродажи Тогда

		МассивСкладов = ОбщегоНазначенияУТ.УдалитьПовторяющиесяЭлементыМассива(Товары.ВыгрузитьКолонку("Склад"));
		
		Если МассивСкладов.Количество() = 1 Тогда
			Склад = МассивСкладов[0];
		Иначе
			Склад = Справочники.Склады.ПустаяСсылка();
		КонецЕсли;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	РезультатЗапрос = Запрос.Выполнить();
	
	Возврат (Не РезультатЗапрос.Пустой());
	
КонецФункции

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

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

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

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

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

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

#КонецЕсли

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