#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
ГодПлатежа = Параметры.ГодПлатежа;
ГодНачалаДействияПриказа = Формат(ГодПлатежа, "ЧГ=");
Если Параметры.Свойство("Заголовок") Тогда
Заголовок = Заголовок + ": " + Параметры.Заголовок;
КонецЕсли;
Если Параметры.Свойство("СтрокаПоиска") Тогда
СтрокаПоиска = Параметры.СтрокаПоиска;
КонецЕсли;
Макет = Справочники.ГосударственныеКонтракты.ПолучитьМакет("МакетАдминистраторыДоходовБюджетов");
АдминистраторыДоходовБюджетов = Справочники.ГосударственныеКонтракты.АдминистраторыДоходовБюджета();
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ТабДокумент.Вывести(ОбластьШапка);
Для Каждого АдминистраторДоходовБюджета Из АдминистраторыДоходовБюджетов Цикл
ЗаполнитьЗначенияСвойств(ОбластьСтрока.Параметры, АдминистраторДоходовБюджета);
ТабДокумент.Вывести(ОбластьСтрока);
КонецЦикла;
ТабДокумент.ФиксацияСверху = 1;
Если НЕ ПустаяСтрока(СтрокаПоиска) Тогда
Если Параметры.Свойство("КБКИсходный") И НЕ ПустаяСтрока(Параметры.КБКИсходный) Тогда
ИмяОбласти = ИскатьСтрокуВТаблицеНаСервере(СтрокаПоиска, СтрЗаменить(Параметры.КБКИсходный, " ", ""));
Иначе
ИмяОбласти = ИскатьСтрокуВТаблицеНаСервере(СтрокаПоиска);
КонецЕсли;
Если ИмяОбласти = "" Тогда
ТекущийЭлемент = Элементы.СтрокаПоиска;
Иначе
НайденнаяОбласть = ТабДокумент.Область(ИмяОбласти);
ТекущийЭлемент = Элементы.ТабДокумент;
ТекущийЭлемент.ТекущаяОбласть = НайденнаяОбласть;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКоманд
&НаКлиенте
Процедура НайтиСтроку(Команда)
Если ПустаяСтрока(СтрокаПоиска) Тогда
ТекущийЭлемент = Элементы.СтрокаПоиска;
Возврат;
КонецЕсли;
ПодключитьОбработчикОжидания("ВыполнитьПоиск", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура Выбрать(Команда)
Область = Элементы.ТабДокумент.ТекущаяОбласть;
ВыполнитьВыбор(Область);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиЭлементовФормы
&НаКлиенте
Процедура СтрокаПоискаПриИзменении(Элемент)
Если ПустаяСтрока(СтрокаПоиска) Тогда
ТекущийЭлемент = Элементы.СтрокаПоиска;
Возврат;
КонецЕсли;
ПодключитьОбработчикОжидания("ВыполнитьПоиск", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ТабДокументВыбор(Элемент, Область, СтандартнаяОбработка)
ВыполнитьВыбор(Область);
КонецПроцедуры
#КонецОбласти
#Область Прочее
&НаСервере
Функция ИскатьСтрокуВТаблицеНаСервере(СтрокаПоиска, КБКИсходный = "")
Перем НайденнаяОбласть;
ТекущаяОбласть = Элементы.ТабДокумент.ТекущаяОбласть;
Если НЕ ПустаяСтрока(КБКИсходный) Тогда
Если ТабДокумент.Область(ТекущаяОбласть.Верх, 1).Текст = КБКИсходный Тогда
НайденнаяОбласть = ТекущаяОбласть;
Иначе
НайденнаяОбласть = ТабДокумент.НайтиТекст(КБКИсходный, ТекущаяОбласть,,,,, Истина);
КонецЕсли;
КонецЕсли;
Если НайденнаяОбласть = Неопределено Тогда
Если СтрДлина(СтрокаПоиска) = 17 И ТабДокумент.Область(ТекущаяОбласть.Верх, 1).Текст = СтрокаПоиска
ИЛИ СтрНайти(ТабДокумент.Область(ТекущаяОбласть.Верх, 2).Текст, СтрокаПоиска) > 0
ИЛИ СтрДлина(СтрокаПоиска) < 17 И СтрНайти(ТабДокумент.Область(ТекущаяОбласть.Верх, 1).Текст, СтрокаПоиска) > 0 Тогда
НайденнаяОбласть = ТекущаяОбласть;
Иначе
НайденнаяОбласть = ТабДокумент.НайтиТекст(СтрокаПоиска, ТекущаяОбласть,,,,, Истина);
КонецЕсли;
КонецЕсли;
Если НайденнаяОбласть = Неопределено Тогда
НайденнаяОбласть = ТабДокумент.НайтиТекст(СтрокаПоиска,,,,,, Истина);
Если НайденнаяОбласть = Неопределено Тогда
СтрокаПоискаБезПробелов = СтрЗаменить(СтрокаПоиска, " ", "");
Если НЕ СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(СтрокаПоискаБезПробелов) Тогда
Возврат "";
КонецЕсли;
Если НайденнаяОбласть = Неопределено Тогда
ДлинаСтрокиПоиска = СтрДлина(СтрокаПоискаБезПробелов);
ЛеваяЧастьСтроки = СтрокаПоискаБезПробелов;
ПраваяЧастьСтроки = "";
Если ДлинаСтрокиПоиска > 10 Тогда
ЛеваяЧастьСтроки = Лев(СтрокаПоискаБезПробелов, 10);
ПраваяЧастьСтроки = Сред(СтрокаПоискаБезПробелов, 11);
ДлинаПравойЧасти = СтрДлина(ПраваяЧастьСтроки);
ПраваяЧастьСтроки =
Лев(("0000" + ?(ДлинаПравойЧасти > 4, Сред(ПраваяЧастьСтроки, 5), "")), ДлинаПравойЧасти);
КонецЕсли;
СтрокаПоискаБезПробелов = ЛеваяЧастьСтроки + ПраваяЧастьСтроки;
НайденнаяОбласть = ТабДокумент.НайтиТекст(СтрокаПоискаБезПробелов, ТекущаяОбласть,,,,, Истина);
КонецЕсли;
КонецЕсли;
Если НайденнаяОбласть = Неопределено Тогда
Возврат "";
КонецЕсли;
КонецЕсли;
Возврат НайденнаяОбласть.Имя;
КонецФункции
&НаСервере
Процедура ИскатьСтрокуНаСервере(НичегоНеНашли)
ПодстрокаПоиска = ОбработатьСтрокуПоиска(СтрокаПоиска);
Если ПодстрокаПоиска = СтрокаПоиска Тогда
ИмяОбласти = ИскатьСтрокуВТаблицеНаСервере(ПодстрокаПоиска);
Иначе
ИмяОбласти = ИскатьСтрокуВТаблицеНаСервере(ПодстрокаПоиска, СтрЗаменить(СтрокаПоиска, " ", ""));
КонецЕсли;
Если ИмяОбласти = "" Тогда
НичегоНеНашли = Истина;
ТекущийЭлемент = Элементы.СтрокаПоиска;
Возврат;
Иначе
НайденнаяОбласть = ТабДокумент.Область(ИмяОбласти);
КонецЕсли;
ТекущийЭлемент = Элементы.ТабДокумент;
ТекущийЭлемент.ТекущаяОбласть = НайденнаяОбласть;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ОбработатьСтрокуПоиска(СтрокаПоиска)
Если СтрДлина(СокрЛП(СтрокаПоиска)) > 26 Тогда
Возврат СтрокаПоиска;
КонецЕсли;
СтрокаПоискаБезПробелов = СтрЗаменить(СтрокаПоиска, " ", "");
Если НЕ СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(СтрокаПоискаБезПробелов) Тогда
Возврат СтрокаПоиска;
КонецЕсли;
Если СтрДлина(СтрокаПоискаБезПробелов) = 20 Тогда
СтрокаПоиска = Сред(СтрокаПоискаБезПробелов, 4);
Иначе
СтрокаПоиска = СтрокаПоискаБезПробелов;
КонецЕсли;
Если СтрДлина(СтрокаПоиска) = 17 Тогда
ВидДохода = Лев(СтрокаПоиска, 10);
КОСГУ = Сред(СтрокаПоиска, 15);
ПодстрокаПоиска = ВидДохода + "0000" + КОСГУ;
Иначе
ПодстрокаПоиска = СтрокаПоиска;
КонецЕсли;
Возврат ПодстрокаПоиска;
КонецФункции
&НаКлиенте
Процедура ВыполнитьВыбор(Область)
ВыбранныйКод = ТабДокумент.Область(Область.Верх, 1, Область.Верх, 1).Текст;
Если ПустаяСтрока(ВыбранныйКод)
ИЛИ НЕ СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(ВыбранныйКод) Тогда
ПоказатьПредупреждение( , НСтр("ru='Выберите строку с кодом'"));
Возврат;
КонецЕсли;
ОповеститьОВыборе(ВыбранныйКод);
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьПоиск()
НичегоНеНашли = Ложь;
ИскатьСтрокуНаСервере(НичегоНеНашли);
Если НичегоНеНашли Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Строка не найдена'"));
КонецЕсли;
КонецПроцедуры
#КонецОбласти