Статьи калькуляции / Модуль менеджера

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

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

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

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

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


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

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

#КонецЕсли

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

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

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

#КонецЕсли

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

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

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

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

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

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

#Область ОбновлениеИнформационнойБазы

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

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

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

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

#КонецЕсли

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