Сборка товаров / Модуль объекта

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

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

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

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

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

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

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

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

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

Процедура ПриКопировании(ОбъектКопирования)
	
	ИсправлениеДокументов.ПриКопировании(ЭтотОбъект, ОбъектКопирования);

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

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

Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)

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

	// Проверка количества в т.ч. товары.
	НоменклатураСервер.ПроверитьЗаполнениеКоличества(ЭтотОбъект, ПроверяемыеРеквизиты, Отказ);

	// Если сборка - доля стоимости не нужна.
	Если ХозяйственнаяОперация = ХозяйственныеОперации.СборкаТоваров Или Товары.Количество() < 2 Тогда
		МассивНепроверяемыхРеквизитов.Добавить("Товары.ДоляСтоимости");
	КонецЕсли;

	// Если накладная по заказу - то код строки должен быть заполнен.
	Если Не ЗначениеЗаполнено(ЗаказНаСборку) Тогда
		МассивНепроверяемыхРеквизитов.Добавить("Товары.КодСтроки");
	КонецЕсли;

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

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

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

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

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

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

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

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

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

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

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

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

	СтрокаТаб = Таблица.Добавить();
	СтрокаТаб.ЗначениеДоступа = Организация;

	СтрокаТаб = Таблица.Добавить();
	СтрокаТаб.ЗначениеДоступа = Склад;
	
КонецПроцедуры

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

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

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

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

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

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

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

Функция СформироватьТаблицуТоваров(РеквизитыШапки)
	
	ТаблицаТоваров = Новый ТаблицаЗначений;
	ТаблицаТоваров.Колонки.Добавить("НомерСтроки", Новый ОписаниеТипов("Число"));
	ТаблицаТоваров.Колонки.Добавить("КодСтроки", Новый ОписаниеТипов("Число"));
	ТаблицаТоваров.Колонки.Добавить("АналитикаУчетаНоменклатуры", Новый ОписаниеТипов("СправочникСсылка.КлючиАналитикиУчетаНоменклатуры"));
	ТаблицаТоваров.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
	ТаблицаТоваров.Колонки.Добавить("Характеристика", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"));
	ТаблицаТоваров.Колонки.Добавить("Назначение", Новый ОписаниеТипов("СправочникСсылка.Назначения"));
	ТаблицаТоваров.Колонки.Добавить("Серия", Новый ОписаниеТипов("СправочникСсылка.СерииНоменклатуры"));
	ТаблицаТоваров.Колонки.Добавить("СтатусУказанияСерий", Новый ОписаниеТипов("Число"));
	ТаблицаТоваров.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
	ТаблицаТоваров.Колонки.Добавить("КоличествоПоРНПТ", Новый ОписаниеТипов("Число"));
	ТаблицаТоваров.Колонки.Добавить("НомерГТД", Новый ОписаниеТипов("СправочникСсылка.НомераГТД"));
	
	ЗаполнитьЗначенияСвойств(ТаблицаТоваров.Добавить(), РеквизитыШапки);
	ТаблицаТоваров[0].НомерСтроки = 1;
	
	Возврат ТаблицаТоваров;
	
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#КонецЕсли

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