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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	ВзаиморасчетыСервер.ПередЗаписью(ЭтотОбъект, Отказ, РежимЗаписи);

	Если Не ЗначениеЗаполнено(Автор) И ЭтоНовый() Тогда
		Автор = Пользователи.ТекущийПользователь();
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

Процедура ИнициализироватьУсловияПродаж()
	
	Если Не ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами") Тогда
		ЗаполнитьУсловияПродажПоУмолчанию();
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

#КонецЕсли

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