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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

	Товары.Загрузить(ТаблицаНакладная);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#КонецЕсли

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