Регистрации в налоговом органе / Модуль менеджера

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

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

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

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

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

	Выборка = Запрос.Выполнить().Выбрать();
	
	Возврат Выборка.Количество();

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

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

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

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

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

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

	Если Не ЗначениеЗаполнено(РегистрацияВНалоговомОргане) Тогда
		Возврат "";
	КонецЕсли;

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

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

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

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

	ШаблонПредставления = НСтр("ru='%1 %2'");  //например: "Москва г"
	Для Каждого Регион Из ТаблицаРегионов Цикл
		Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонПредставления,
			Регион.Наименование,
			Регион.Сокращение);
		СписокРегионов.Добавить(Формат(Регион.КодСубъектаРФ, "ЧЦ=2; ЧН=; ЧВН="), Представление);
	КонецЦикла;
	
	// Сортируем по наименованию региона
	СписокРегионов.СортироватьПоПредставлению();
	
КонецПроцедуры

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

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

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

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

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

	Ограничение.Текст =
	"ПрисоединитьДополнительныеТаблицы
	|ЭтотСписок КАК ЭтотСписок
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Организации КАК Владельцы 
	|	ПО Владельцы.Ссылка = ЭтотСписок.Владелец
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Организации КАК ОбособленныеПодразделения 
	|	ПО ОбособленныеПодразделения.ГоловнаяОрганизация = Владельцы.Ссылка
	|;
	|РазрешитьЧтение
	|ГДЕ
	|	ЗначениеРазрешено(Владелец)
	| ИЛИ ЗначениеРазрешено(ОбособленныеПодразделения.Ссылка)
	|;
	|РазрешитьИзменениеЕслиРазрешеноЧтение
	|ГДЕ
	|	ЗначениеРазрешено(Владелец)";

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

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

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

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

//++ НЕ УТ

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

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

Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	Поля.Добавить("Код");
	Поля.Добавить("КПП");
	Поля.Добавить("НаименованиеСлужебное");
	
КонецПроцедуры

Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;

	Если  ЗначениеЗаполнено(Данные.КПП) И ЗначениеЗаполнено(Данные.НаименованиеСлужебное) Тогда
		Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = 'ФНС %1 КПП %2 (%3)'"),
			Данные.Код, Данные.КПП, Данные.НаименованиеСлужебное);
	ИначеЕсли ЗначениеЗаполнено(Данные.КПП) Тогда
		Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = 'ФНС %1 КПП %2'"),
			Данные.Код, Данные.КПП);
	Иначе
		Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = 'ФНС %1'"),
			Данные.Код);
	КонецЕсли;	
	
КонецПроцедуры

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

//-- НЕ УТ

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

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

Функция РегистрацииКрупнейшихНалогоплательщиковОбновлены(Параметры) Экспорт

	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	РегистрацииВНалоговомОргане.Ссылка
	|ИЗ
	|	Справочник.РегистрацииВНалоговомОргане КАК РегистрацииВНалоговомОргане
	|ГДЕ
	|	РегистрацииВНалоговомОргане.КрупнейшийНалогоплательщик = ЛОЖЬ
	|	И НЕ РегистрацииВНалоговомОргане.КПП ПОДОБНО """"
	|	И ПОДСТРОКА(РегистрацииВНалоговомОргане.КПП, 5, 2) = ""50""";
	
	Результат = Запрос.Выполнить();
	
	Возврат Результат.Пустой();
		
КонецФункции

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

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

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