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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Процедура ПриКопировании(ОбъектКопирования)

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

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

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

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

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

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

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

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

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

	УстановитьПривилегированныйРежим(Истина);
	Результат = Запрос.Выполнить();
	УстановитьПривилегированныйРежим(Ложь);
	Если Не Результат.Пустой() Тогда

		Товары.Загрузить(Результат.Выгрузить());
		
	ИначеЕсли ЗначениеЗаполнено(ДанныеЗаполнения.АктОРасхождениях) Тогда  

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

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

Процедура ЗаполнитьДокументНаОснованииАктаПеремещения(ДанныеЗаполнения)

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

	УстановитьПривилегированныйРежим(Истина);
	Результат = Запрос.Выполнить();
	УстановитьПривилегированныйРежим(Ложь);
	Если Не Результат.Пустой() Тогда

		Товары.Загрузить(Результат.Выгрузить());
		
	ИначеЕсли ЗначениеЗаполнено(ДанныеЗаполнения.АктОРасхождениях) Тогда  

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

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

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

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

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

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

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

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

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

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

#КонецЕсли

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