#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
АдресРезультата = Параметры.АдресРезультата;
ИДТаблицы = Параметры.ИДТаблицы;
ПараметрыЭкземпляраБюджета = ПолучитьИзВременногоХранилища(Параметры.ПараметрыВыводаВидаБюджета);
КолонкиТаблиц = ПараметрыЭкземпляраБюджета.КолонкиТаблиц;
СтруктураКолонок = КолонкиТаблиц[Параметры.ИДТаблицы];
КолонкиПоИзмерениям = Параметры.КолонкиПоИзмерениям;
ДобавляемыеЭлементы = Новый Массив;
ДобавляемыеКолонки = Новый Массив;
Документы.ЭкземплярБюджета.РассчитатьЭлементыСпискаБюджетаКДобавлению(ДобавляемыеЭлементы,
ДобавляемыеКолонки,
КолонкиПоИзмерениям);
СтруктураАналогРасшифровки = Новый Структура;
ПараметрыДобавленияКолонок = Документы.ЭкземплярБюджета.ШаблонПараметровДобавленияКолонокСпискаБюджетов();
ПараметрыДобавленияКолонок.ДобавляемыеЭлементы = ДобавляемыеЭлементы;
ПараметрыДобавленияКолонок.ДобавляемыеКолонки = ДобавляемыеКолонки;
ПараметрыДобавленияКолонок.КолонкиПоИзмерениям = КолонкиПоИзмерениям;
ПараметрыДобавленияКолонок.СтруктураКолонок = СтруктураКолонок;
ПараметрыДобавленияКолонок.СтруктураАналогРасшифровки = СтруктураАналогРасшифровки;
Документы.ЭкземплярБюджета.ДобавитьКолонкиСпискаБюджетаПоТаблице(ПараметрыДобавленияКолонок);
Документы.ЭкземплярБюджета.ОтразитьИзмененияКолонокСпискаБюджетаНаФорме(ЭтаФорма, ДобавляемыеЭлементы, ДобавляемыеКолонки);
РедактируемыеКолонкиСписка = СтрСоединить(КолонкиПоИзмерениям.Измерения, ",");
МаксимальноеКоличествоКолонок = КолонкиПоИзмерениям.Измерения.Количество() + СтруктураАналогРасшифровки.Количество();
АдресФайлаДанных = Параметры.АдресФайлаДанных;
РасширениеФайла = Параметры.РасширениеФайла;
МассивЗначений = МассивЗначенийЗагружаемогоФайла(АдресФайлаДанных, РасширениеФайла, МаксимальноеКоличествоКолонок);
ГлубинаДерева = БюджетнаяОтчетностьВыводСервер.ГлубинаДерева(СтруктураКолонок.Строки) + 1;
СоответствиеИндексовЗначений = Новый Соответствие;
Для Строка = ГлубинаДерева По МассивЗначений[0].ВГраница() Цикл
Колонка = 0;
НоваяСтрока = СписокРедактированияБюджета.Добавить();
СтруктураСопоставления = Новый Структура;
Для Каждого Измерение Из КолонкиПоИзмерениям.Измерения Цикл
Если Колонка > МассивЗначений.ВГраница() Тогда
Значение = Неопределено;
Иначе
Значение = МассивЗначений[Колонка][Строка];
КонецЕсли;
СтруктураСопоставления.Вставить(Измерение, Значение);
Колонка = Колонка + 1;
КонецЦикла;
НоваяСтрока.ИндексСтроки = СписокРедактированияБюджета.Индекс(НоваяСтрока);
СоответствиеИндексовЗначений.Вставить(НоваяСтрока.ИндексСтроки, СтруктураСопоставления);
Для Каждого КлючИЗначение Из СтруктураАналогРасшифровки Цикл
Если Колонка > МассивЗначений.ВГраница() Тогда
НоваяСтрока[КлючИЗначение.Ключ] = Неопределено;
КонецЕсли;
Значение = МассивЗначений[Колонка][Строка];
Если КлючИЗначение.Значение.Свойство("ИмяПоказателя") И КлючИЗначение.Значение.ИмяПоказателя = "Значение"
И КолонкиПоИзмерениям.НастройкиКолонок.ТипыЗначенийПоказателей.Получить(КлючИЗначение.Значение.Колонка)
= "СтавкаНДС" Тогда
НоваяСтрока[КлючИЗначение.Ключ] = Справочники.СтавкиНДС.НайтиПоНаименованию(Значение, Истина);
Иначе
НоваяСтрока[КлючИЗначение.Ключ] = Значение;
КонецЕсли;
Колонка = Колонка + 1;
КонецЦикла;
КонецЦикла;
СопоставитьДанныеЗагрузкиСДаннымиИБ(КолонкиПоИзмерениям, СоответствиеИндексовЗначений);
ЭлементыЗагрузки = Новый Массив;
АдресаЭлементов = Новый Структура;
Для Сч = 0 По КолонкиПоИзмерениям.Измерения.ВГраница() Цикл
ИмяИзмерения = КолонкиПоИзмерениям.Измерения[Сч];
ПараметрыФормированияСпискаВвода =
КолонкиПоИзмерениям.НастройкиКолонок[ИмяИзмерения].ПараметрыФормированияСпискаВвода;
ПараметрыЭлемента = Документы.ЭкземплярБюджета.ПараметрыЭлементаВводаЗначенийНаЯзыкеПользователя(
ПараметрыФормированияСпискаВвода);
Элемент = Новый РеквизитФормы("ЗначениеЗагрузки_" + ИмяИзмерения,
Новый ОписаниеТипов("Строка"),,
ПараметрыЭлемента.Заголовок);
ЭлементыЗагрузки.Добавить(Элемент);
АдресаЭлементов.Вставить("ЗначениеЗагрузки_" + ИмяИзмерения, "Группа" + (Сч % 3))
КонецЦикла;
ЭтаФорма.ИзменитьРеквизиты(ЭлементыЗагрузки);
Для Каждого Элемент Из ЭлементыЗагрузки Цикл
Адрес = АдресаЭлементов[Элемент.Имя];
ЭлементФормы = Элементы.Добавить(Элемент.Имя, Тип("ПолеФормы"), Элементы[Адрес]);
ЭлементФормы.ПутьКДанным = Элемент.Имя;
ЭлементФормы.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Одинарная, 1);
КонецЦикла;
АдресСоответствияЗагрузки = ПоместитьВоВременноеХранилище(СоответствиеИндексовЗначений, УникальныйИдентификатор);
ИмяКолонкиПериод = Неопределено;
Для Каждого Измерение Из КолонкиПоИзмерениям.Измерения Цикл
Если БюджетнаяОтчетностьКлиентСервер.ЭтоПолеПериода(Измерение) Тогда
ИмяКолонкиПериод = Измерение;
КонецЕсли;
КонецЦикла;
Если ИмяКолонкиПериод = Неопределено Тогда
ПериодНеСоответствуетПериодуБюджета = Ложь;
Иначе
СписокПериодов = СписокРедактированияБюджета.Выгрузить(,ИмяКолонкиПериод);
СписокПериодов.Свернуть(ИмяКолонкиПериод);
СписокПериодов.Сортировать(ИмяКолонкиПериод);
Если СписокПериодов.Количество() Тогда
МинимальныйПериод = СписокПериодов[0][ИмяКолонкиПериод];
МаксимальныйПериод = СписокПериодов[СписокПериодов.Количество() - 1][ИмяКолонкиПериод];
Если Не (МинимальныйПериод >= Параметры.НачалоПериода
И МаксимальныйПериод <= Параметры.ОкончаниеПериода) Тогда
ПериодНеСоответствуетПериодуБюджета = Истина;
ПериодЗагружаемыхДанных = НСтр("ru = 'Период загружаемых данных (%1) не соответствует периоду бюджета (%2).
|Строки, период которых не входит в период бюджета загружены не будут.
|Продолжить?'");
ПериодЗагружаемыхДанных = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ПериодЗагружаемыхДанных,
Формат(МинимальныйПериод, "ДЛФ=D") + "-" + Формат(МаксимальныйПериод, "ДЛФ=D"),
Формат(Параметры.НачалоПериода, "ДЛФ=D") + "-" + Формат(Параметры.ОкончаниеПериода, "ДЛФ=D"));
КонецЕсли;
КонецЕсли;
КонецЕсли;
СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если ПериодНеСоответствуетПериодуБюджета Тогда
ПодключитьОбработчикОжидания("ПоказатьВопросНесоответствияПериода", 0.2, Истина);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ВариантОтображенияСтрокПриИзменении(Элемент)
Элементы.СписокРедактированияБюджета.ОтборСтрок = Неопределено;
Если ВариантОтображенияСтрок = 1 Тогда
Элементы.СписокРедактированияБюджета.ОтборСтрок = Новый ФиксированнаяСтруктура("Загружать", Ложь);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СписокРедактированияБюджетаЗагружатьПриИзменении(Элемент)
ТекущиеДанные = Элементы.СписокРедактированияБюджета.ТекущиеДанные;
Если ТекущиеДанные.Загружать Тогда
Колонки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(РедактируемыеКолонкиСписка);
Для Каждого Измерение Из Колонки Цикл
СписокВыбора = Элементы[Измерение].СписокВыбора;
Если Не СписокВыбора.Количество() Тогда
Продолжить;
КонецЕсли;
Если СписокВыбора.НайтиПоЗначению(ТекущиеДанные[Измерение]) = Неопределено Тогда
ЭлементФормы = Элементы[Измерение];
ТекущиеДанные.Загружать = Ложь;
ТекстПредупреждения = НСтр("ru = 'В колонке ""%1"" выбрано неверное значение'");
ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПредупреждения, ЭлементФормы.Заголовок);
ПоказатьПредупреждение(, ТекстПредупреждения);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
НастроитьВариантыОтображенияСтрок();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийТаблицыФормы
&НаКлиенте
Процедура СписокРедактированияБюджетаПриАктивизацииСтроки(Элемент)
ТекущиеДанные = Элемент.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
СтруктураПолей = ПолучитьИзВременногоХранилища(АдресСоответствияЗагрузки)[ТекущиеДанные.ИндексСтроки];
Для Каждого КлючИЗначение Из СтруктураПолей Цикл
ЭтаФорма["ЗначениеЗагрузки_" + КлючИЗначение.Ключ] = КлючИЗначение.Значение;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура СписокРедактированияБюджетаПослеУдаления(Элемент)
НастроитьВариантыОтображенияСтрок();
КонецПроцедуры
&НаКлиенте
Процедура СписокРедактированияБюджетаПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
Отказ = Истина;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ЗакрытьФормы(Команда)
Закрыть();
КонецПроцедуры
&НаКлиенте
Процедура ПеренестиВДокумент(Команда)
Отбор = Новый Структура("Загружать", Ложь);
СтрокиСНесопоставленнымиДанными = СписокРедактированияБюджета.НайтиСтроки(Отбор);
Отказ = (СтрокиСНесопоставленнымиДанными.Количество() > 0);
Если Отказ Тогда
ШаблонСообщения = НСтр("ru = 'Не все строки сопоставлены'");
ПоказатьПредупреждение(, ШаблонСообщения);
Возврат;
КонецЕсли;
Закрыть();
ПоместитьДанныеВоВременноеХранилищеНаСервере();
ОповеститьОВыборе(АдресРезультата);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_СписокРедактированияБюджетаОсновнаяКолонкаПриИзменении(Команда)
СписокРедактированияПриИзмененииНаСервере();
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиенте
Процедура ПоказатьВопросНесоответствияПериода()
ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПриОткрытииФрагмент", ЭтаФорма);
ПоказатьВопрос(ОповещениеОЗакрытии, ПериодЗагружаемыхДанных, РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытииФрагмент(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Нет Тогда
Закрыть();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СписокРедактированияПриИзмененииНаСервере()
СоответствиеИндексовЗначений = ПолучитьИзВременногоХранилища(АдресСоответствияЗагрузки);
МассивКолонок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(РедактируемыеКолонкиСписка);
Колонка = Элементы.СписокРедактированияБюджета.ТекущийЭлемент.Имя;
Строка = Элементы.СписокРедактированияБюджета.ТекущаяСтрока;
Если МассивКолонок.Найти(Колонка) = Неопределено Тогда
Возврат;
КонецЕсли;
СтрокаЗагрузки = СписокРедактированияБюджета[Строка];
СтруктураСопоставления = СоответствиеИндексовЗначений[СтрокаЗагрузки.ИндексСтроки];
ИмяПоиска = СтруктураСопоставления[Колонка];
Для Каждого СтрокаСписка Из СписокРедактированияБюджета Цикл
Если СтрокаЗагрузки = СтрокаСписка Тогда
Продолжить;
КонецЕсли;
СтруктураСопоставления = СоответствиеИндексовЗначений[СтрокаСписка.ИндексСтроки];
Если Не ЗначениеЗаполнено(СтруктураСопоставления[Колонка]) Тогда
Продолжить;
КонецЕсли;
Если СтруктураСопоставления[Колонка] = ИмяПоиска Тогда
СтрокаСписка[Колонка] = СтрокаЗагрузки[Колонка];
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура СопоставитьДанныеЗагрузкиСДаннымиИБ(КолонкиПоИзмерениям, СоответствиеИндексовЗначений)
Измерения = КолонкиПоИзмерениям.Измерения;
НастройкиКолонок = КолонкиПоИзмерениям.НастройкиКолонок;
ТаблицаНастройкиПоискаЗначений = Новый ТаблицаЗначений;
ТаблицаНастройкиПоискаЗначений.Колонки.Добавить("СтрокаПоиска", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(1024)));
ТаблицаНастройкиПоискаЗначений.Колонки.Добавить("Тип");
Для каждого СтрокаЗагрузки Из СписокРедактированияБюджета Цикл
СтрокаЗагрузки.Загружать = Истина;
СтруктураСопоставления = СоответствиеИндексовЗначений[СтрокаЗагрузки.ИндексСтроки];
Для Каждого Измерение Из Измерения Цикл
ЗагружаемаяАналитика = СтруктураСопоставления[Измерение];
Если Не ЗначениеЗаполнено(ЗагружаемаяАналитика) Тогда
Продолжить;
КонецЕсли;
СписокОграничений = Неопределено;
Если Элементы[Измерение].СписокВыбора.Количество() Тогда
СписокОграничений = Элементы[Измерение].СписокВыбора;
КонецЕсли;
Для каждого Тип Из НастройкиКолонок[Измерение].ТипЗначения.Типы() Цикл
Если Тип = Тип("Дата") Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = ТаблицаНастройкиПоискаЗначений.Добавить();
НоваяСтрока.СтрокаПоиска = СокрЛП(ЗагружаемаяАналитика);
НоваяСтрока.Тип = Тип;
КонецЦикла;
КонецЦикла;
КонецЦикла;
РазныеТипы = ОбщегоНазначенияКлиентСервер.СвернутьМассив(ТаблицаНастройкиПоискаЗначений.ВыгрузитьКолонку("Тип"));
ТекстВременныхТаблиц = "";
ТекстВыборки = "";
Запрос = Новый Запрос;
Для Каждого Тип Из РазныеТипы Цикл
РазныеНаименования = ТаблицаНастройкиПоискаЗначений.Скопировать(Новый Структура("Тип", Тип));
РазныеНаименования.Свернуть("СтрокаПоиска");
МетаданныеОбъекта = Метаданные.НайтиПоТипу(Тип);
ПолноеИмя = МетаданныеОбъекта.ПолноеИмя();
ИмяВременнойТаблицы = "Фильтр_" + СтрЗаменить(ПолноеИмя, ".", "");
Разделитель = "
|;
|
|///////////////////////////////////////////////////////////////
|";
ТекстВременнойТаблицы = "ВЫБРАТЬ
| ТаблицаПоиска.СтрокаПоиска КАК СтрокаПоиска
|ПОМЕСТИТЬ #ИмяВременнойТаблицы
|ИЗ
| &ИмяВременнойТаблицы КАК ТаблицаПоиска";
ТекстВременнойТаблицы = СтрЗаменить(ТекстВременнойТаблицы, "#ИмяВременнойТаблицы", ИмяВременнойТаблицы);
ТекстВременнойТаблицы = СтрЗаменить(ТекстВременнойТаблицы, "&ИмяВременнойТаблицы", "&" + ИмяВременнойТаблицы);
ТекстВременныхТаблиц = ТекстВременныхТаблиц + ТекстВременнойТаблицы + Разделитель;
Запрос.УстановитьПараметр(ИмяВременнойТаблицы, РазныеНаименования);
Если Не Документы.ТипВсеСсылки().СодержитТип(Тип) Тогда
МассивПолей = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве("Наименование");
Иначе
МассивПолей = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве("Номер");
КонецЕсли;
Если МетаданныеОбъекта.Реквизиты.Найти("НаименованиеПолное") <> Неопределено Тогда
МассивПолей.Добавить("НаименованиеПолное");
КонецЕсли;
Для Каждого Поле Из МетаданныеОбъекта.ВводПоСтроке Цикл
Если МассивПолей.Найти(Поле.Имя) = Неопределено Тогда
МассивПолей.Добавить(Поле.Имя);
КонецЕсли;
КонецЦикла;
Для Каждого Поле Из МассивПолей Цикл
ТекстОбъединения = "
|
|ОБЪЕДИНИТЬ ВСЕ
|
|";
ТекстТаблицы = "ВЫБРАТЬ
| ТаблицаФильтра.СтрокаПоиска КАК СтрокаПоиска,
| Таблица.Ссылка КАК Ссылка,
| &ТаблицаПоле КАК Наименование
|ИЗ
| &ИмяВременнойТаблицы КАК ТаблицаФильтра
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ #ПолноеИмяТаблицы КАК Таблица
| ПО (&ТаблицаПоле = ТаблицаФильтра.СтрокаПоиска)";
Для Сч = 0 По МетаданныеОбъекта.СтандартныеРеквизиты.Количество()-1 Цикл
Если МетаданныеОбъекта.СтандартныеРеквизиты[Сч].Имя = "ЭтоГруппа" Тогда
ТекстТаблицы = ТекстТаблицы + "
| И НЕ Таблица.ЭтоГруппа";
Прервать;
КонецЕсли;
КонецЦикла;
ТекстТаблицы = СтрЗаменить(ТекстТаблицы, "&ТаблицаПоле", "Таблица." + Поле);
ТекстТаблицы = СтрЗаменить(ТекстТаблицы, "&ИмяВременнойТаблицы", ИмяВременнойТаблицы);
ТекстТаблицы = СтрЗаменить(ТекстТаблицы, "#ПолноеИмяТаблицы", ПолноеИмя);
ТекстВыборки = ТекстВыборки + ?(ЗначениеЗаполнено(ТекстВыборки), ТекстОбъединения, "") + ТекстТаблицы;
КонецЦикла;
КонецЦикла;
ТекстЗапроса = ТекстВременныхТаблиц + ТекстВыборки;
Если Не ПустаяСтрока(ТекстЗапроса) Тогда
Запрос.Текст = ТекстЗапроса;
РезультатПоиска = Запрос.Выполнить().Выгрузить();
Иначе
РезультатПоиска = Новый ТаблицаЗначений;
РезультатПоиска.Колонки.Добавить("СтрокаПоиска");
РезультатПоиска.Колонки.Добавить("Ссылка");
РезультатПоиска.Колонки.Добавить("Наименование");
КонецЕсли;
РезультатПоиска.Индексы.Добавить("СтрокаПоиска");
Для каждого СтрокаЗагрузки Из СписокРедактированияБюджета Цикл
СтрокаЗагрузки.Загружать = Истина;
СтруктураСопоставления = СоответствиеИндексовЗначений[СтрокаЗагрузки.ИндексСтроки];
Для Каждого Измерение Из Измерения Цикл
ЗагружаемаяАналитика = СтруктураСопоставления[Измерение];
Если Не ЗначениеЗаполнено(ЗагружаемаяАналитика) Тогда
Продолжить;
КонецЕсли;
Если БюджетнаяОтчетностьКлиентСервер.ЭтоПолеПериода(Измерение) Тогда
СтрокаЗагрузки[Измерение] = ЗагружаемаяАналитика;
Продолжить;
КонецЕсли;
КлючПоиска = СокрЛП(ЗагружаемаяАналитика);
НайденныеЭлементы = РезультатПоиска.НайтиСтроки(Новый Структура("СтрокаПоиска", КлючПоиска));
ТаблицаПодходящихНаименований = Новый ТаблицаЗначений;
ТаблицаПодходящихНаименований.Колонки.Добавить("Ссылка");
ТаблицаПодходящихНаименований.Колонки.Добавить("УсловныйПроцентПодобия");
ИскомоеНаименование = СокрЛП(ЗагружаемаяАналитика);
Для Каждого НайденнаяСтрока Из НайденныеЭлементы Цикл
Если Элементы[Измерение].СписокВыбора.Количество() Тогда
СписокВыбора = Элементы[Измерение].СписокВыбора;
Если СписокВыбора.НайтиПоЗначению(НайденнаяСтрока.Ссылка) = Неопределено Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
НоваяСтрока = ТаблицаПодходящихНаименований.Добавить();
НоваяСтрока.Ссылка = НайденнаяСтрока.Ссылка;
СтрокаСравнения = СокрЛП(НайденнаяСтрока.Наименование);
Если СтрокаСравнения = ИскомоеНаименование Тогда
НоваяСтрока.УсловныйПроцентПодобия = 100;
Продолжить;
КонецЕсли;
Если Не СтрДлина(СтрокаСравнения) Тогда
Продолжить;
КонецЕсли;
НоваяСтрока.УсловныйПроцентПодобия = СтрДлина(ИскомоеНаименование) / СтрДлина(СтрокаСравнения) * 100;
Если БюджетнаяОтчетностьКлиентСервер.ЛеваяЧастьИмениСовпадает(СтрокаСравнения, ИскомоеНаименование) Тогда
НоваяСтрока.УсловныйПроцентПодобия = Мин(НоваяСтрока.УсловныйПроцентПодобия + 10, 99);
КонецЕсли;
КонецЦикла;
ТаблицаПодходящихНаименований.Сортировать("УсловныйПроцентПодобия УБЫВ");
Если ТаблицаПодходящихНаименований.Количество()
И ТаблицаПодходящихНаименований[0].УсловныйПроцентПодобия > 70 Тогда
СтрокаЗагрузки[Измерение] = ТаблицаПодходящихНаименований[0].Ссылка;
Продолжить;
КонецЕсли;
СтрокаЗагрузки.Загружать = Ложь;
КонецЦикла;
КонецЦикла;
НастроитьВариантыОтображенияСтрок();
КонецПроцедуры
&НаСервере
Процедура НастроитьВариантыОтображенияСтрок()
СписокВыбора = Элементы.ВариантОтображенияСтрок.СписокВыбора;
СписокВыбора.Очистить();
Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Все (%1)'"),
СписокРедактированияБюджета.Количество());
СписокВыбора.Добавить(0, Представление);
СтрокиЕстьНесопоставленныеДанные = СписокРедактированияБюджета.НайтиСтроки(Новый Структура("Загружать", Ложь));
Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Несопоставленные (%1)'"),
СтрокиЕстьНесопоставленныеДанные.Количество());
СписокВыбора.Добавить(1, Представление);
КонецПроцедуры
&НаКлиенте
Процедура ОтметитьВсе(Команда)
Для Каждого СтрокаЗагрузки Из СписокРедактированияБюджета Цикл
СтрокаЗагрузки.Загружать = Истина;
КонецЦикла;
НастроитьВариантыОтображенияСтрок();
КонецПроцедуры
&НаКлиенте
Процедура СнятьВсе(Команда)
Для Каждого СтрокаЗагрузки Из СписокРедактированияБюджета Цикл
СтрокаЗагрузки.Загружать = Ложь;
КонецЦикла;
НастроитьВариантыОтображенияСтрок();
КонецПроцедуры
&НаСервере
Процедура ПоместитьДанныеВоВременноеХранилищеНаСервере()
Таблица = СписокРедактированияБюджета.Выгрузить();
СтрокаСвертки = "";
СтрокаСуммирования = "";
Для Каждого Колонка Из Таблица.Колонки Цикл
Если СтрНайти(Колонка.Имя, "Примечание") Тогда
Продолжить;
КонецЕсли;
Если СтрНайти(РедактируемыеКолонкиСписка, Колонка.Имя) Тогда
СтрокаСвертки = СтрокаСвертки + ?(ПустаяСтрока(СтрокаСвертки), "", ",") + Колонка.Имя;
Иначе
СтрокаСуммирования = СтрокаСуммирования + ?(ПустаяСтрока(СтрокаСуммирования), "", ",") + Колонка.Имя;
КонецЕсли;
КонецЦикла;
Таблица.Свернуть(СтрокаСвертки, СтрокаСуммирования);
Результат = Новый Структура("СписокРедактированияБюджета,
|ИДТаблицы",
Таблица,
ИДТаблицы);
ПоместитьВоВременноеХранилище(Результат, АдресРезультата);
КонецПроцедуры
&НаСервереБезКонтекста
Функция МассивЗначенийЗагружаемогоФайла(АдресФайлаДанных, РасширениеФайла, КоличествоКолонокПоСтруктуреБюджета)
МассивЗначений = Новый Массив;
Для НомерКолонки = 1 По КоличествоКолонокПоСтруктуреБюджета Цикл
МассивЗначений.Добавить(Новый Массив);
КонецЦикла;
ИмяВременногоФайла = ПолучитьИмяВременногоФайла(РасширениеФайла);
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайлаДанных);
ДвоичныеДанные.Записать(ИмяВременногоФайла);
ДвоичныеДанные = Неопределено;
УдалитьИзВременногоХранилища(АдресФайлаДанных);
ТабличныйДокумент = Новый ТабличныйДокумент;
Попытка
ТабличныйДокумент.Прочитать(ИмяВременногоФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
Исключение
ТекстОшибки = НСтр("ru = 'Не удалось прочитать выбранный файл по причине %1'");
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ТекстОшибки,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки);
Возврат МассивЗначений;
КонецПопытки;
НомерПервойКолонки = 0;
НомерПервойСтроки = 0;
МаксимальноеКоличествоПустыхКолонок = 10;
МаксимальноеКоличествоПустыхСтрок = 10;
ТекущийНомерСтроки = 0;
ПустыхСтрок = 0;
Пока НомерПервойСтроки = 0 Цикл
Если ПустыхСтрок >= МаксимальноеКоличествоПустыхСтрок Тогда
Прервать;
КонецЕсли;
ПустыхКолонок = 0;
ТекущийНомерСтроки = ТекущийНомерСтроки + 1;
ТекущийНомерКолонки = 0;
Пока НомерПервойСтроки = 0 Цикл
Если ПустыхКолонок >= МаксимальноеКоличествоПустыхКолонок Тогда
Прервать;
КонецЕсли;
ТекущийНомерКолонки = ТекущийНомерКолонки + 1;
ИмяОбласти = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"R%1C%2",
Формат(ТекущийНомерСтроки, "ЧН=0; ЧГ=0"),
Формат(ТекущийНомерКолонки, "ЧН=0; ЧГ=0"));
Значение = ТабличныйДокумент.Область(ИмяОбласти).Текст;
Если НЕ ЗначениеЗаполнено(Значение) Тогда
ПустыхКолонок = ПустыхКолонок + 1;
Продолжить;
Иначе
Если НомерПервойКолонки = 0 Тогда
НомерПервойКолонки = ТекущийНомерКолонки;
НомерПервойСтроки = ТекущийНомерСтроки;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Если НЕ НомерПервойСтроки = 0 Тогда
ТекущийНомерСтроки = НомерПервойСтроки;
ПустыхСтрок = 0;
Пока Истина Цикл
ЕстьЗначениеПоСтроке = Ложь;
ЗначенияПоСтроке = Новый Соответствие;
Для ИндексТекущийКолонки = 0 По КоличествоКолонокПоСтруктуреБюджета-1 Цикл
ТекущийНомерКолонки = НомерПервойКолонки + ИндексТекущийКолонки;
ИмяОбласти = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"R%1C%2",
Формат(ТекущийНомерСтроки, "ЧН=0; ЧГ=0"),
Формат(ТекущийНомерКолонки, "ЧН=0; ЧГ=0"));
Область = ТабличныйДокумент.Область(ИмяОбласти);
Значение = ?(Область.СодержитЗначение, Область.Значение, Область.Текст);
Если ЗначениеЗаполнено(Значение) Тогда
ЕстьЗначениеПоСтроке = Истина;
КонецЕсли;
ЗначенияПоСтроке.Вставить(ИндексТекущийКолонки, Значение);
КонецЦикла;
Если НЕ ЕстьЗначениеПоСтроке Тогда
ПустыхСтрок = ПустыхСтрок + 1;
Иначе
ПустыхСтрок = 0;
Для каждого ИндексКолонкиИЗначение Из ЗначенияПоСтроке Цикл
МассивЗначений[ИндексКолонкиИЗначение.Ключ].Добавить(ИндексКолонкиИЗначение.Значение);
КонецЦикла;
КонецЕсли;
Если ПустыхСтрок >= МаксимальноеКоличествоПустыхСтрок Тогда
Прервать;
КонецЕсли;
ТекущийНомерСтроки = ТекущийНомерСтроки + 1;
КонецЦикла;
КонецЕсли;
Попытка
УдалитьФайлы(ИмяВременногоФайла);
Исключение
КодЯзыка = ОбщегоНазначения.КодОсновногоЯзыка();
СобытиеЖР = НСтр("ru = 'Бюджетирование'", КодЯзыка) + "." + НСтр("ru = 'Удаление временного файла загрузки данных'", КодЯзыка);
ТекстОшибки = НСтр("ru = 'Не удалось удалить временный файл загрузки данных по причине %1'", КодЯзыка);
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ТекстОшибки,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ЗаписьЖурналаРегистрации(СобытиеЖР, УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки);
КонецПопытки;
Возврат МассивЗначений;
КонецФункции
#КонецОбласти