Организации / Модуль менеджера

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

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

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

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

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

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

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

// Вызывается при начальном заполнении справочника.
//
// Параметры:
//  КодыЯзыков - Массив - список языков конфигурации. Актуально для мультиязычных конфигураций.
//  Элементы   - ТаблицаЗначений - данные заполнения. Состав колонок соответствует набору реквизитов
//                                 справочника.
//  ТабличныеЧасти - Структура - Ключ - Имя табличной части объекта.
//                               Значение - Выгрузка в таблицу значений пустой табличной части.
//
Процедура ПриНачальномЗаполненииЭлементов(КодыЯзыков, Элементы, ТабличныеЧасти) Экспорт

	#Область УправленческаяОрганизация
	Элемент = Элементы.Добавить();
	Элемент.ИмяПредопределенныхДанных = "УправленческаяОрганизация";
	Элемент.Наименование = НСтр("ru = 'Управленческая организация'", ОбщегоНазначения.КодОсновногоЯзыка());
	Элемент.Префикс = НСтр("ru = 'УУ'");
	Элемент.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо;
	Элемент.ВалютаРегламентированногоУчета = НастройкиСистемыЛокализация.ВалютаРегламентированногоУчетаПоУмолчанию();
	Элемент.СтранаРегистрации = НастройкиСистемыЛокализация.ОсновнаяСтранаПоУмолчанию();
	Элемент.Статус = Перечисления.СтатусыОрганизацийПодразделений.Действует;
	#КонецОбласти

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

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


#Область ОбособленныеПодразделения

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

// Проверяет, связана ли организация с другими организациями по организационной структуре.
//
// Параметры:
//	Организация - СправочникСсылка.Организации - проверяемая организация.
//
// Возвращаемое значение:
//	Булево - признак взаимосвязанности. Если организация взаимосвязана с другими,
//		возвращается Истина, в противном случае Ложь.
//
Функция ОрганизацияВзаимосвязанаСДругимиОрганизациями(Организация) Экспорт
	
	МассивВзаимосвязанныхОрганизаций = МассивВзаимосвязанныхОрганизаций(Организация);
	ОрганизацияВзаимосвязанаСДругимиОрганизациями = (МассивВзаимосвязанныхОрганизаций.Количество() <> 0);
	
	Возврат ОрганизацияВзаимосвязанаСДругимиОрганизациями;
	
КонецФункции

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

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

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

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

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

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

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

#Область ИспользованиеНесколькихОрганизаций

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

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

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

// Возвращает признак использования нескольких организаций.
//
// Возвращаемое значение:
//		Булево
//
Функция ИспользуетсяНесколькоОрганизаций() Экспорт
	
	Возврат ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоОрганизаций");
	
КонецФункции

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

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

#Область Прочие

// Возвращает имена блокируемых реквизитов для механизма блокирования реквизитов БСП.
//
//	Возвращаемое значение:
//		Массив - имена блокируемых реквизитов.
//
Функция ПолучитьБлокируемыеРеквизитыОбъекта() Экспорт

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

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

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

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

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

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

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

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

	СтруктураЭлементов = Новый Структура();
	СтруктураЭлементов.Вставить("МассивЭлементов", МассивЭлементов);
	СтруктураЭлементов.Вставить("ЭлементОписание", "ОписаниеНастройкиУчетаНДС");
	
	СоответствиеЭлементов.Вставить("НастройкиУчетаНДС", СтруктураЭлементов);
	
	ОрганизацииЛокализация.ДополнитьСоответствиеЭлементовФормыПараметрамНалоговУчетныхПолитик(СоответствиеЭлементов);
	
	Возврат СоответствиеЭлементов
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

//++ Локализация

//++ НЕ УТ

// ЗарплатаКадры

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

// Конец ЗарплатаКадры

//-- НЕ УТ

//-- Локализация

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

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

#КонецЕсли

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

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

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

#КонецЕсли

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

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

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

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

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

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

#Область ГрупповоеИзменениеОбъектов

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

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

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

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

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

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

	ТабличныйДокумент.Вывести(Макет.ПолучитьОбласть("Линия"));
	//++ Локализация
	ТабличныйДокумент.Вывести(Макет.ПолучитьОбласть("Схема"));
	//-- Локализация
	УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, 1, ОбъектыПечати, Организация);
	
	ТабличныйДокумент.АвтоМасштаб = Истина;
	
	Возврат ТабличныйДокумент;

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

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

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

// Вызывается при переходе на версию БСП 2.2.1.12
//
Процедура ЗаполнитьКонстантуИспользоватьНесколькоОрганизаций() Экспорт
	
	Если ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоОрганизаций") =
			ПолучитьФункциональнуюОпцию("НеИспользоватьНесколькоОрганизаций") Тогда
		// Опции должны иметь противоположные значения.
		// Если это не так, то значит в ИБ раньше не было этих опций - инициализируем их значения.
		Константы.ИспользоватьНесколькоОрганизаций.Установить(КоличествоОрганизаций() > 1);
	КонецЕсли;
	
КонецПроцедуры

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

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

	Обработчик = Обработчики.Добавить();
	Обработчик.Процедура = "Справочники.Организации.ОбработатьДанныеДляПереходаНаНовуюВерсию";
	Обработчик.Версия = "11.5.24.25";
	Обработчик.РежимВыполнения = "Отложенно";
	Обработчик.Идентификатор = Новый УникальныйИдентификатор("86c8d6c4-9ff8-42a8-b31d-1db8918515ba");
	Обработчик.Многопоточный = Истина;
	Обработчик.ПроцедураЗаполненияДанныхОбновления = "Справочники.Организации.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию";
	Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы";
	
	СписокОписаний = Новый Массив;
	СписокОписаний.Добавить(НСтр("ru = 'Обновление справочника ""Организации"":'"));
	СписокОписаний.Добавить(НСтр("ru = '- Заполнение мультиязычных реквизитов справочника';"));
	
	Обработчик.Комментарий = СтрСоединить(СписокОписаний, Символы.ПС);
	Обработчик.Порядок = Перечисления.ПорядокОбработчиковОбновления.Обычный;
	
	Читаемые = Новый Массив;
	Читаемые.Добавить(Метаданные.Справочники.Организации.ПолноеИмя());
	Обработчик.ЧитаемыеОбъекты = СтрСоединить(Читаемые, ",");
	
	Изменяемые = Новый Массив;
	Изменяемые.Добавить(Метаданные.Справочники.Организации.ПолноеИмя());
	Обработчик.ИзменяемыеОбъекты = СтрСоединить(Изменяемые, ",");
	
	Блокируемые = Новый Массив;
	Блокируемые.Добавить(Метаданные.Справочники.Организации.ПолноеИмя());
	Обработчик.БлокируемыеОбъекты = СтрСоединить(Блокируемые, ",");

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

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

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

//++ Локализация

//++ НЕ УТ

// ЗарплатаКадры

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

// Конец ЗарплатаКадры

//-- НЕ УТ

//-- Локализация

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

#Область ШаблоныСообщений

// Вызывается при подготовке шаблонов сообщений и позволяет переопределить список реквизитов и вложений.
//
// Параметры:
//  Реквизиты               - ДеревоЗначений - список реквизитов шаблона:
//         * Имя            - Строка - Уникальное имя общего реквизита.
//         * Представление  - Строка - Представление общего реквизита.
//         * Тип            - Тип    - Тип реквизита. По умолчанию строка.
//         * Формат         - Строка - Формат вывода значения для чисел, дат, строк и булевых значений.
//  Вложения                - ТаблицаЗначений - печатные формы и вложения:
//         * Имя            - Строка - Уникальное имя вложения.
//         * Представление  - Строка - Представление варианта.
//         * ТипФайла       - Строка - Тип вложения, который соответствует расширению файла: "pdf", "png", "jpg", mxl"
//                                      и др.
//  ДополнительныеПараметры - Структура - дополнительные сведения о шаблоне сообщений.
//
Процедура ПриПодготовкеШаблонаСообщения(Реквизиты, Вложения, ДополнительныеПараметры) Экспорт
	
КонецПроцедуры

// Вызывается в момент создания сообщений по шаблону для заполнения значений реквизитов и вложений.
//
// Параметры:
//  Сообщение - Структура - структура с ключами:
//    * ЗначенияРеквизитов - Соответствие из КлючИЗначение- список используемых в шаблоне реквизитов:
//      * Ключ     - Строка - имя реквизита в шаблоне;
//      * Значение - Строка - значение заполнения в шаблоне.
//    * ЗначенияОбщихРеквизитов - Соответствие из КлючИЗначение - список используемых в шаблоне общих реквизитов:
//      * Ключ     - Строка - имя реквизита в шаблоне;
//      * Значение - Строка - значение заполнения в шаблоне.
//    * Вложения - Соответствие из КлючИЗначение - значения реквизитов
//      * Ключ     - Строка - имя вложения в шаблоне;
//      * Значение - ДвоичныеДанные, Строка - двоичные данные или адрес во временном хранилище вложения.
//  ПредметСообщения - ЛюбаяСсылка - ссылка на объект являющийся источником данных.
//  ДополнительныеПараметры - Структура -  Дополнительная информация о шаблоне сообщения.
//
Процедура ПриФормированииСообщения(Сообщение, ПредметСообщения, ДополнительныеПараметры) Экспорт
	
КонецПроцедуры

// Заполняет список получателей SMS при отправке сообщения сформированного по шаблону.
//
// Параметры:
//   ПолучателиSMS - ТаблицаЗначений - список получается SMS:
//     * НомерТелефона - Строка - номер телефона, куда будет отправлено сообщение SMS.
//     * Представление - Строка - представление получателя сообщения SMS.
//     * Контакт       - СправочникСсылка - контакт, которому принадлежит номер телефона.
//  ПредметСообщения - ЛюбаяСсылка - ссылка на объект являющийся источником данных.
//
Процедура ПриЗаполненииТелефоновПолучателейВСообщении(ПолучателиSMS, ПредметСообщения) Экспорт
	
КонецПроцедуры

// Заполняет список получателей письма при отправки сообщения сформированного по шаблону.
//
// Параметры:
//   ПолучателиПисьма - ТаблицаЗначений - список получается письма:
//     * Адрес           - Строка - адрес электронной почты получателя.
//     * Представление   - Строка - представление получается письма.
//     * ВариантОтправки - Строка - Варианты отправки письма: "Кому", "Копия", "СкрытаяКопия", "ОбратныйАдреса";
//  ПредметСообщения - ЛюбаяСсылка - ссылка на объект являющийся источником данных.
//
Процедура ПриЗаполненииПочтыПолучателейВСообщении(ПолучателиПисьма, ПредметСообщения) Экспорт
	
КонецПроцедуры

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

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

#КонецЕсли

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