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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#КонецЕсли

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