Статьи расходов / Модуль менеджера

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

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

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

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

КонецФункции

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

КонецФункции

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

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

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

	СписокСтатей = Новый Массив;
	Выборка = Результат.Выбрать();
	Пока Выборка.Следующий() Цикл
		СписокСтатей.Добавить(Выборка.Ссылка);
	КонецЦикла;
	
	Возврат СписокСтатей;
	
КонецФункции

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

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

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

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

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

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

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

	#Область ПрибыльУбытокПрошлыхЛет
	Элемент = Элементы.Добавить();
	Элемент.ИмяПредопределенныхДанных = "ПрибыльУбытокПрошлыхЛет";
	МультиязычностьСервер.ЗаполнитьМультиязычныйРеквизит(Элемент, "Наименование", "ru = 'Прибыль (убыток) прошлых лет'", КодыЯзыков); // @НСтр-2
	Элемент.Код = "000000007";
	Элемент.ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.НаправленияДеятельности");
	Элемент.ВариантРаспределенияРасходовРегл = Перечисления.ВариантыРаспределенияРасходов.НаНаправленияДеятельности;
	Элемент.ВидДеятельностиРасходов = Перечисления.ВидыДеятельностиРасходов.ПрочаяДеятельность;
	ДополнитьЭлементСтатьиРасходов(Элемент);	
	#КонецОбласти

	#Область РазницыСтоимостиВозвратаИФактическойСтоимостиТоваров
	Элемент = Элементы.Добавить();
	Элемент.ИмяПредопределенныхДанных = "РазницыСтоимостиВозвратаИФактическойСтоимостиТоваров";
	МультиязычностьСервер.ЗаполнитьМультиязычныйРеквизит(Элемент, "Наименование", "ru = 'Разницы стоимости возврата и фактической стоимости товаров'", КодыЯзыков); // @НСтр-2
	Элемент.Код = "000000004";
	Элемент.ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.НаправленияДеятельности");
	Элемент.ВариантРаспределенияРасходовРегл = Перечисления.ВариантыРаспределенияРасходов.НаНаправленияДеятельности;
	Элемент.ВидДеятельностиРасходов = Перечисления.ВидыДеятельностиРасходов.ОсновнаяДеятельность;
	ДополнитьЭлементСтатьиРасходов(Элемент);	
	#КонецОбласти

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

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

	#Область РасходыПриКонвертацииВалюты
	Элемент = Элементы.Добавить();
	Элемент.ИмяПредопределенныхДанных = "РасходыПриКонвертацииВалюты";
	МультиязычностьСервер.ЗаполнитьМультиязычныйРеквизит(Элемент, "Наименование", "ru = 'Расходы при конвертации валюты'", КодыЯзыков); // @НСтр-2
	Элемент.Код = "000000014";
	Элемент.ТипЗначения = Новый ОписаниеТипов("ПеречислениеСсылка.АналитикаКурсовыхРазниц");
	Элемент.ВариантРаспределенияРасходовРегл = Перечисления.ВариантыРаспределенияРасходов.НаНаправленияДеятельности;
	Элемент.ВидДеятельностиРасходов = Перечисления.ВидыДеятельностиРасходов.ПрочаяДеятельность;
	ДополнитьЭлементСтатьиРасходов(Элемент);	
	#КонецОбласти

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

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

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

	#Область ОтклонениеВСтоимостиТоваров
	Элемент = Элементы.Добавить();
	Элемент.ИмяПредопределенныхДанных = "ОтклонениеВСтоимостиТоваров";
	МультиязычностьСервер.ЗаполнитьМультиязычныйРеквизит(Элемент, "Наименование", "ru = 'Отклонение в стоимости товаров'", КодыЯзыков); // @НСтр-2
	Элемент.Код = "000000016";
	Элемент.ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.НаправленияДеятельности");
	Элемент.ВариантРаспределенияРасходовРегл = Перечисления.ВариантыРаспределенияРасходов.НаНаправленияДеятельности;
	Элемент.ВидДеятельностиРасходов = Перечисления.ВидыДеятельностиРасходов.ОсновнаяДеятельность;
	ДополнитьЭлементСтатьиРасходов(Элемент);	
	#КонецОбласти
	
	#Область СторноПроизводственныхЗатрат
	Элемент = Элементы.Добавить();
	Элемент.ИмяПредопределенныхДанных = "СторноПроизводственныхЗатрат";
	МультиязычностьСервер.ЗаполнитьМультиязычныйРеквизит(Элемент, "Наименование", "ru = 'Сторно производственных затрат'", КодыЯзыков); // @НСтр-2
	Элемент.Код = "000000017";
	#КонецОбласти
	
	#Область ПроизводственныеРасходыПрошлыхПериодов
	Элемент = Элементы.Добавить();
	Элемент.ИмяПредопределенныхДанных = "ПроизводственныеРасходыПрошлыхПериодов";
	МультиязычностьСервер.ЗаполнитьМультиязычныйРеквизит(Элемент, "Наименование", "ru = 'Производственные расходы прошлых периодов'", КодыЯзыков); // @НСтр-2
	Элемент.Код = "000000018";
	#КонецОбласти
	
	#Область РасходыПриСписанииОС
	Элемент = Элементы.Добавить();
	Элемент.ИмяПредопределенныхДанных = "РасходыПриСписанииОС";
	МультиязычностьСервер.ЗаполнитьМультиязычныйРеквизит(Элемент, "Наименование", "ru = 'Расходы, связанные со списанием ОС'", КодыЯзыков); // @НСтр-2
	Элемент.Код = "000000019";
	#КонецОбласти

	#Область ВыбытиеМатериальныхЦенностей
	Элемент = Элементы.Добавить();
	Элемент.ИмяПредопределенныхДанных = "ВыбытиеМатериальныхЦенностей";
	МультиязычностьСервер.ЗаполнитьМультиязычныйРеквизит(Элемент, "Наименование", "ru = 'Выбытие материальных ценностей'", КодыЯзыков); // @НСтр-2
	Элемент.Код = "000000021";
	#КонецОбласти

	#Область ПродажаМатериальныхЦенностей
	Элемент = Элементы.Добавить();
	Элемент.ИмяПредопределенныхДанных = "ПродажаМатериальныхЦенностей";
	МультиязычностьСервер.ЗаполнитьМультиязычныйРеквизит(Элемент, "Наименование", "ru = 'Продажа материальных ценностей'", КодыЯзыков); // @НСтр-2
	Элемент.Код = "000000023";
	#КонецОбласти

	#Область РасходыПриПродажеОС
	Элемент = Элементы.Добавить();
	Элемент.ИмяПредопределенныхДанных = "РасходыПриПродажеОС";
	МультиязычностьСервер.ЗаполнитьМультиязычныйРеквизит(Элемент, "Наименование", "ru = 'Расходы, связанные с продажей ОС'", КодыЯзыков); // @НСтр-2
	Элемент.Код = "000000020";
	#КонецОбласти
	
	#Область ДолгосрочныеАктивыКПродаже
	Элемент = Элементы.Добавить();
	Элемент.ИмяПредопределенныхДанных = "ДолгосрочныеАктивыКПродаже";
	МультиязычностьСервер.ЗаполнитьМультиязычныйРеквизит(Элемент, "Наименование", "ru = 'Долгосрочные активы к продаже'", КодыЯзыков); // @НСтр-2
	Элемент.Код = "000000022";
	#КонецОбласти
	
КонецПроцедуры

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

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

// Возвращает соответствие статей, для которых нельзя изменить тип расходов, соответствующему значению.
// 
// Возвращаемое значение:
//	Соответствие:
//		Ключ - ПланВидовХарактеристикСсылка.СтатьиРасходов - статья, для которой используется неизменяемый тип расходов;
//		Значение - ПеречислениеСсылка.ТипыРасходов - тип расхода который должен использоваться для статьи.
//
Функция СоответствиеСтатейТипамРасходов() Экспорт
	
	СоответствиеСтатейТипамРасходов = Новый Соответствие;
	
	
	Возврат СоответствиеСтатейТипамРасходов;
	
КонецФункции

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

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

// СтандартныеПодсистемы.ВерсионированиеОбъектов

// Определяет настройки объекта для подсистемы ВерсионированиеОбъектов.
//
// Параметры:
//  Настройки - Структура - настройки подсистемы.
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт

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

// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов


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

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

Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
	
	ДоходыИРасходыСервер.ОбработкаПолученияДанныхВыбораПВХСтатьиРасходов(ДанныеВыбора, Параметры, СтандартнаяОбработка);
	
КонецПроцедуры

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

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

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

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

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

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

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

Процедура ПроверкаЗаполненияАналитикТЧОбъекта(Объект,
												Реквизиты,
												НепроверяемыеРеквизиты,
												Ошибки,
												ДополнительныеПараметры = Неопределено)
	
	// Определим список статей для контроля
	ОбщийМассивСтатей = Новый Массив;
	
	Для Каждого ОписаниеТЧ Из Реквизиты Цикл
		ИмяТЧ = ОписаниеТЧ.Ключ;
		
		СтруктураРеквизитов = ИменаРеквизитовСтатьиИАналитики(ОписаниеТЧ.Значение, НепроверяемыеРеквизиты, ИмяТЧ + ".");
		
		Для Каждого КлючИЗначение Из СтруктураРеквизитов Цикл
			МассивСтатей = Объект[ИмяТЧ].ВыгрузитьКолонку(КлючИЗначение.Ключ);
			
			
			Для Каждого Статья Из МассивСтатей Цикл
				ОбщийМассивСтатей.Добавить(Статья);
			КонецЦикла;
		КонецЦикла;
	КонецЦикла;
	
	// Проверим заполнение аналитики
	ОбязательныеСтатьи = СтатьиСОбязательнымЗаполнениемАналитики(ОбщийМассивСтатей);
	
	Для Каждого ОписаниеТЧ Из Реквизиты Цикл // Табличные части
		ИмяТЧ	= ОписаниеТЧ.Ключ;
		ТЧ		= Объект[ИмяТЧ];
		
		Если ТипЗнч(ТЧ) = Тип("ТаблицаЗначений")
			И ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда
			
			ТабличнаяЧасть = Неопределено;
			
			ПредставлениеТЧ			= ДополнительныеПараметры.ПредставлениеТЧ;
			ПредставленияРеквизитов	= ДополнительныеПараметры.ПредставленияРеквизитов;
			
		Иначе
			МетаданныеОбъекта	= Объект.Метаданные();
			ТабличнаяЧасть		= МетаданныеОбъекта.ТабличныеЧасти.Найти(ИмяТЧ);
			
			ПредставлениеТЧ			= ТабличнаяЧасть.Синоним;
			ПредставленияРеквизитов	= Неопределено;
		КонецЕсли;
		
		СтруктураРеквизитов = ИменаРеквизитовСтатьиИАналитики(ОписаниеТЧ.Значение, Неопределено, ИмяТЧ + ".");
		
		Для Индекс = 0 По ТЧ.Количество() - 1 Цикл // Строки табличной части
			СтрокаТЧ = ТЧ[Индекс];
			
			Для Каждого КлючИЗначение Из СтруктураРеквизитов Цикл
				Если ТабличнаяЧасть = Неопределено Тогда
					ПредставлениеРеквизита = ПредставленияРеквизитов[КлючИЗначение.Значение];
				Иначе
					ПредставлениеРеквизита = ТабличнаяЧасть.Реквизиты.Найти(КлючИЗначение.Значение).Синоним;
				КонецЕсли;
				
				Статья		= СтрокаТЧ[КлючИЗначение.Ключ];
				Аналитика	= СтрокаТЧ[КлючИЗначение.Значение];
				
				Если Не (ОбязательныеСтатьи.Найти(Статья) = Неопределено
					Или ЗначениеЗаполнено(Аналитика)) Тогда
					
					ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(
						Ошибки,
						Ошибки.ПрефиксОбъекта + ИмяТЧ + "[%1]." + КлючИЗначение.Значение,
						СтрШаблон(НСтр("ru='Не заполнено поле ""%1"" в строке %2 списка ""%3""'"),
							ПредставлениеРеквизита, СтрокаТЧ.НомерСтроки, ПредставлениеТЧ),
						ИмяТЧ,
						Индекс,
						СтрШаблон(НСтр("ru='Не заполнено поле ""%1"" в строке %2 списка ""%3""'"),
							ПредставлениеРеквизита, СтрокаТЧ.НомерСтроки, ПредставлениеТЧ));
					
				КонецЕсли;
			КонецЦикла;
		КонецЦикла;
	КонецЦикла;
	
КонецПроцедуры

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

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

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

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

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

#КонецЕсли

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