Пересортица товаров / Модуль объекта

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	ИменаПолейССуффиксом = ПараметрыПересчета.ИменаПолейССуффиксом;
	ИменаПолейССуффиксом.Вставить("Номенклатура",	"НоменклатураОприходование");
	ИменаПолейССуффиксом.Вставить("Характеристика",	"ХарактеристикаОприходование");

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

//++ НЕ УТ

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


//-- НЕ УТ

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

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

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

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

#КонецЕсли

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