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

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

#Область ПрограммныйИнтерфейс
	
// Возвращает имена реквизитов, которые не должны отображаться в списке реквизитов обработки ГрупповоеИзменениеОбъектов.
//
//	Возвращаемое значение:
//		Массив - массив имен реквизитов.
//
Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт
	
	НеРедактируемыеРеквизиты = Новый Массив;
	
	Возврат НеРедактируемыеРеквизиты;
	
КонецФункции

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

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

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

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

// Возвращает признак использования нескольких подразделений-диспетчеров.
// 
// Возвращаемое значение:
//  Булево - Истина, если используется несколько подразделений-диспетчеров.
//
Функция ИспользуетсяНесколькоПодразделенийДиспетчеров() Экспорт
	
	Возврат КоличествоПодразделенийДиспетчеров() > 1;
	
КонецФункции

//++ НЕ УТ

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

// Определяет цеховую кладовую подразделения
//
// Параметры:
//	Подразделение	- СправочникСсылка.СтруктураПредприятия - Подразделение для которого определяется кладовая.
//
// Возвращаемое значение:
//		СправочникСсылка.Склады - Цеховая кладовая подразделения.
//
Функция ЦеховаяКладоваяПоУмолчанию(Подразделение) Экспорт

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

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

//-- НЕ УТ


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

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

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

#Область Команды

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

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

#Область ДляВызоваИзДругихПодсистем

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

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

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

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

// СтандартныеПодсистемы.УправлениеДоступом

// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа.
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт

	Ограничение.Текст =
	"РазрешитьЧтениеИзменение
	|ГДЕ
	|	ЗначениеРазрешено(Ссылка)";

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

// Конец СтандартныеПодсистемы.УправлениеДоступом

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

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

#КонецЕсли

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

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

Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
	//++ НЕ УТ
	Если Параметры.Свойство("Отбор") И (Параметры.Отбор.Свойство("ПодразделениеДиспетчерИлиПроизводственноеПодразделение") 
		Или Параметры.Отбор.Свойство("ПроизводственноеПодразделение")) Тогда
		ПроизводствоВызовСервера.СтруктураПредприятияОбработкаПолученияДанныхВыбора(
					ДанныеВыбора, 
					Параметры, 
					СтандартнаяОбработка);
		Возврат;	
	КонецЕсли; 
	//-- НЕ УТ
	
	СтандартнаяОбработка = Ложь;
	Если ЗначениеЗаполнено(Параметры.СтрокаПоиска) Тогда
		
		Запрос = Новый Запрос;
		Запрос.Текст = 
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 51
		|	СтруктураПредприятия.Ссылка КАК Ссылка,
		|	СтруктураПредприятия.ПометкаУдаления КАК ПометкаУдаления,
		|	СтруктураПредприятия.Наименование КАК Наименование,
		|	ВЫБОР
		|		КОГДА СтруктураПредприятия.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыОрганизацийПодразделений.НеДействует)
		|			ТОГДА ИСТИНА
		|		ИНАЧЕ ЛОЖЬ
		|	КОНЕЦ КАК НеДействует,
		|	СтруктураПредприятия.Код КАК Код,
		|	ЛОЖЬ КАК ПодборПоКоду
		|ИЗ
		|	Справочник.СтруктураПредприятия КАК СтруктураПредприятия
		|ГДЕ
		|	СтруктураПредприятия.Наименование ПОДОБНО &Текст
		|	И НЕ СтруктураПредприятия.ПометкаУдаления
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ ПЕРВЫЕ 51
		|	СтруктураПредприятия.Ссылка,
		|	СтруктураПредприятия.ПометкаУдаления,
		|	СтруктураПредприятия.Наименование КАК Наименование,
		|	ВЫБОР
		|		КОГДА СтруктураПредприятия.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыОрганизацийПодразделений.НеДействует)
		|			ТОГДА ИСТИНА
		|		ИНАЧЕ ЛОЖЬ
		|	КОНЕЦ,
		|	СтруктураПредприятия.Код,
		|	ИСТИНА
		|ИЗ
		|	Справочник.СтруктураПредприятия КАК СтруктураПредприятия
		|ГДЕ
		|	СтруктураПредприятия.Код ПОДОБНО &Текст
		|	И НЕ СтруктураПредприятия.ПометкаУдаления
		|
		|УПОРЯДОЧИТЬ ПО
		|	Наименование";
		
		Запрос.УстановитьПараметр("Текст", "%" + СокрЛП(Параметры.СтрокаПоиска) + "%");
		
		Если МультиязычностьСервер.ИспользуетсяДополнительныйЯзык("1") 
			Или МультиязычностьСервер.ИспользуетсяДополнительныйЯзык("2") Тогда
			
			ИменаРеквизитов = МультиязычностьСервер.ИменаРеквизитовСУчетомКодаЯзыка("Наименование");
			
			ШаблонЗамены = СтрЗаменить("СтруктураПредприятия.%1", "%1", ИменаРеквизитов["Наименование"]);
			Запрос.Текст = СтрЗаменить(Запрос.Текст, "СтруктураПредприятия.Наименование",
				ШаблонЗамены);
			
		КонецЕсли;
		
		Результат = Запрос.Выполнить();
		Выборка = Результат.Выбрать();
		
		ДанныеВыбора = Новый СписокЗначений;
		Пока Выборка.Следующий() Цикл       
			ШаблонПредставления = "%1 (%2)";
			Если Выборка.ПодборПоКоду Тогда
				Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонПредставления,
					Выборка.Код, Выборка.Наименование);
			Иначе
				Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонПредставления,
					Выборка.Наименование, Выборка.Код);
			КонецЕсли;
					
			Если Выборка.НеДействует Тогда 
				Элемент = Новый Структура;
				Элемент.Вставить("Значение", Выборка.Ссылка);
				Элемент.Вставить("ПометкаУдаления", Выборка.ПометкаУдаления);
				ТекстПредупреждения = НСтр("ru = 'Выбрано недействующее подразделение.'"); 
				Элемент.Вставить("Предупреждение", ТекстПредупреждения);
				ДанныеВыбора.Добавить(Элемент, Представление);
			Иначе
				ДанныеВыбора.Добавить(Выборка.Ссылка, Представление);
			КонецЕсли;
		КонецЦикла; 
	КонецЕсли;
	
КонецПроцедуры

#КонецЕсли

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

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

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

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

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

#Область Печать

// Заполняет список команд печати.
// 
// Параметры:
//   КомандыПечати - см. УправлениеПечатью.СоздатьКоллекциюКомандПечати
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
	
КонецПроцедуры

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

#Область Отчеты

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

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

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

// см. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления
//
Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт

	Обработчик = Обработчики.Добавить();
	Обработчик.Процедура = "Справочники.СтруктураПредприятия.ОбработатьДанныеДляПереходаНаНовуюВерсию";
	Обработчик.Версия = "11.5.24.25";
	Обработчик.РежимВыполнения = "Отложенно";
	Обработчик.Идентификатор = Новый УникальныйИдентификатор("3729d747-7cb7-426a-afb4-002f38ef369c");
	Обработчик.Многопоточный = Истина;
	Обработчик.ПроцедураЗаполненияДанныхОбновления = "Справочники.СтруктураПредприятия.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию";
	Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы";
	
	СписокОписаний = Новый Массив;
	СписокОписаний.Добавить(НСтр("ru = 'Обновление справочника ""Подразделение"":'"));
	СписокОписаний.Добавить(НСтр("ru = '- Заполнение мультиязычных реквизитов справочника';"));
	
	Обработчик.Комментарий = СтрСоединить(СписокОписаний, Символы.ПС);
	Обработчик.Порядок = Перечисления.ПорядокОбработчиковОбновления.Обычный;
	
	Читаемые = Новый Массив;
	Читаемые.Добавить(Метаданные.Справочники.СтруктураПредприятия.ПолноеИмя());
	Обработчик.ЧитаемыеОбъекты = СтрСоединить(Читаемые, ",");
	
	Изменяемые = Новый Массив;
	Изменяемые.Добавить(Метаданные.Справочники.СтруктураПредприятия.ПолноеИмя());
	Обработчик.ИзменяемыеОбъекты = СтрСоединить(Изменяемые, ",");
	
	Блокируемые = Новый Массив;
	Блокируемые.Добавить(Метаданные.Справочники.СтруктураПредприятия.ПолноеИмя());
	Обработчик.БлокируемыеОбъекты = СтрСоединить(Блокируемые, ",");

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

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

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

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

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

#КонецЕсли

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