Движение продукции и материалов / Модуль объекта

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Функция ОпределитьРаспоряжения(РеквизитыШапки)

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область ПроверкаЗаполнения

Процедура ПроверитьРеквизитыШапки(ПредставлениеПолей, Отказ)

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

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


Процедура ОтключитьПроверкуЗаполненияПоХозяйственнойОперации(МассивНепроверяемыхРеквизитов)

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

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

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

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

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

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

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

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

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

#КонецЕсли

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