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

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

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

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

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

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

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

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

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

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

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

Процедура ПриЧтенииПредставленийНаСервере() Экспорт
	// СтандартныеПодсистемы.БазоваяФункциональность
	МультиязычностьСервер.ПриЧтенииПредставленийНаСервере(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.БазоваяФункциональность
КонецПроцедуры

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

#КонецЕсли

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