Возврат товаров от клиента / Способ определения себестоимости / Модуль формы

файл
#Область ОписаниеПеременных

&НаКлиенте
Перем ВыполняетсяЗакрытие;

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

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

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

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

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

#Область ОбработчикиСобытийЭлементовФормы

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

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

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

&НаКлиенте
Процедура ВидЦеныПриИзменении(Элемент)
	
	ЗаполнитьСуммыПоВидуЦен();
	
КонецПроцедуры

&НаКлиенте
Процедура ДатаЗаполненияПриИзменении(Элемент)
	
	ЗаполнитьСуммыПоВидуЦен();

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

&НаКлиенте
Процедура СуммаУпрПриИзменении(Элемент)
	
	Если ТипНалогообложения <> ПредопределенноеЗначение("Перечисление.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС") Тогда
		Товары[0].СуммаБезНДС = Товары[0].СуммаСНДС;
	КонецЕсли;
	
КонецПроцедуры

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

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура ОКЗакрыть(Команда)

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПеренестиДанныеВДокумент()

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

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

#Область Инициализация

ВыполняетсяЗакрытие = Ложь;

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



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