Оприходование излишков отгруженных товаров / Модуль объекта

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Процедура ПриКопировании(ОбъектКопирования)
	
	ИнициализироватьДокумент();
	
	ОприходованиеИзлишковОтгруженныхТоваровЛокализация.ПриКопировании(ЭтотОбъект, ОбъектКопирования);
	
	Автор = Пользователи.ТекущийПользователь();
	
КонецПроцедуры

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

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

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

Процедура ЗаполнитьПоАктуОРасхождениях(ДанныеЗаполнения)

	АктОРасхождениях = ДанныеЗаполнения.АктОРасхождениях;
	ОснованиеАктаОРасхождениях = ДанныеЗаполнения.ОснованиеАкта;

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

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

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

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

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

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

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

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

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

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

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

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

#КонецЕсли

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