Акт о расхождениях после приемки / Модуль объекта

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

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

Процедура ПриКопировании(ОбъектКопирования)
	
	ИнициализироватьДокумент();
	
КонецПроцедуры

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

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

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

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

	АктОРасхожденияхПослеПриемкиЛокализация.ОбработкаЗаполнения(ЭтотОбъект, ДанныеЗаполнения, СтандартнаяОбработка);
	РасхожденияСервер.ПроверитьТипОснованияАктаПриСоздании(ЭтотОбъект)

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

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

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

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

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

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

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

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

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

Процедура ЗаполнитьПоОтбору(СтруктураОтбора)
	
	Если СтруктураОтбора.Свойство("Организация") Тогда
		Организация = СтруктураОтбора.Организация;
	КонецЕсли;
	
	Если СтруктураОтбора.Свойство("Партнер") Тогда
		Партнер = СтруктураОтбора.Партнер;
	КонецЕсли;
	
	Если СтруктураОтбора.Свойство("Контрагент") Тогда
		Контрагент = СтруктураОтбора.Контрагент;
	КонецЕсли;
	
	Если СтруктураОтбора.Свойство("Валюта") Тогда
		Валюта = СтруктураОтбора.Валюта;
	КонецЕсли;
	
	Если СтруктураОтбора.Свойство("ХозяйственнаяОперация") Тогда
		ХозяйственнаяОперация = СтруктураОтбора.ХозяйственнаяОперация;
		ТипОснованияАктаОРасхождении = ТипОснованияАктаОРасхожденииПоХозОперации(ХозяйственнаяОперация);
	КонецЕсли;
	
	Если СтруктураОтбора.Свойство("ТипОснованияАктаОРасхождении") Тогда
		ТипОснованияАктаОРасхождении = СтруктураОтбора.ТипОснованияАктаОРасхождении;
	КонецЕсли;
	
КонецПроцедуры

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

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

Функция ТекстЗапросаПоОснованиюПоступлению()

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

КонецФункции

Функция ТекстЗапросаПоОснованиюПриемкиНаХранение()

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

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

Функция ТекстЗапросаПоОснованиюВозврату()

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

КонецФункции

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

#Область УсловияЗакупок

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

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

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

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

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

#Область УсловияПродаж

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

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

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

	ЗаполнитьНалогообложениеНДС();
	
КонецПроцедуры

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

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

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

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

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

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

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

Функция ТипОснованияАктаОРасхожденииПоХозОперации(ХозОперация)
	
	Если ХозОперация = Перечисления.ХозяйственныеОперации.ВозвратТоваровОтКлиента
		Или ХозОперация = Перечисления.ХозяйственныеОперации.ВозвратОтРозничногоПокупателя Тогда
		
		Возврат Перечисления.ТипыОснованияАктаОРасхождении.ВозвратТоваровОтКлиента;
		
	ИначеЕсли ХозОперация = Перечисления.ХозяйственныеОперации.ПриемНаХранениеСПравомПродажи Тогда
		Возврат Перечисления.ТипыОснованияАктаОРасхождении.ПриемкаТоваровНаХранение;
	ИначеЕсли ХозОперация = Перечисления.ХозяйственныеОперации.ВозвратОтХранителя Тогда
		Возврат Перечисления.ТипыОснованияАктаОРасхождении.ВозвратТоваровОтХранителя;
	ИначеЕсли ХозОперация = Перечисления.ХозяйственныеОперации.ВозвратОтКомиссионера Тогда
		Возврат Перечисления.ТипыОснованияАктаОРасхождении.ВозвратОтКомиссионера;
	//++ НЕ УТ
	ИначеЕсли ХозОперация = Перечисления.ХозяйственныеОперации.ПоступлениеОтПереработчика2_5 Тогда
		Возврат Перечисления.ТипыОснованияАктаОРасхождении.ПоступлениеТоваровОтПереработчика;
	ИначеЕсли ХозОперация = Перечисления.ХозяйственныеОперации.ВозвратОтПереработчика2_5 Тогда
		Возврат Перечисления.ТипыОснованияАктаОРасхождении.ВозвратТоваровОтПереработчика;
	//-- НЕ УТ

	Иначе
		Возврат Перечисления.ТипыОснованияАктаОРасхождении.ПриобретениеТоваровУслуг;
	КонецЕсли;
	
КонецФункции

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

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

#КонецЕсли

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