Прочее оприходование товаров / Модуль объекта

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

//++ НЕ УТ

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

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

//-- НЕ УТ

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

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

Процедура ИнициализироватьДокумент(ДанныеЗаполнения = Неопределено)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

//++ НЕ УТ

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

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

//-- НЕ УТ

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

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

#КонецЕсли

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