Шаги:
1. Сперва откроем основную форму обработки и в командную панель добавим свою команду (кнопку) для открытия нашей формы с настройками подключения (свойства на рисунке справа)
![](/upload/iblock/b18/b180ab86812b8527a4f42f33729ff9ab.png)
Также создаем действие для нашей команды
![](/upload/iblock/8e7/8e7e4fc1999b53b3f4df23c4fd975e55.png)
Процедура КоманднаяПанельФормыВнешниеИсточникиДанных(Кнопка)
Если мФормаВнешнихИсточников.Открыта() Тогда
мФормаВнешнихИсточников.Закрыть();
Иначе
мФормаВнешнихИсточников.Открыть();
КонецЕсли;
КонецПроцедуры
"мФормаВнешнихИсточников" это переменная модуля формы
![](/upload/iblock/f31/f31e037a92b7594e11ead806debca24d.png)
![](/upload/iblock/947/947183508f65746e7ccc8730b6b237c3.png)
Из переменной "мФормаПараметров" сделаем экспортную, добавив "Экспорт" в конец.
С модулем основной формы пока что все.
2. Теперь добавим новые необходимые нам формы в обработку
![](/upload/iblock/19e/19e9288eb361d2e491dc6a98df3e3c35.png)
![](/upload/iblock/527/527b8482eac64bc2e99e8f7d2a95f5a9.png)
Сразу же для формы "ФормаТаблицаСДаннымиВнешнегоИсточника" добавим реквизит формы с типом "ТаблицаЗначений"
![](/upload/iblock/dca/dca7eb9e84ad83a965990ad626be4196.png)
и выведем на форму со стандартной командной панелью,
![](/upload/iblock/0f1/0f18d6fb04a96ec50b46ad36cb755769.png)
больше ничего с этой формой не делаем, оставляем в покое.
Переходим в форму "ФормаВнешнихИсточников", так она должна выглядеть в итоге,
![](/upload/iblock/c1c/c1c62c49d3f70e255a7da50bc163f55a.png)
добавляем реквизит формы "ПараметрыПодключений" с типом "ТаблицаЗначений"
![](/upload/iblock/32c/32c6a480034b685b71565a51e98e5d31.png)
Можно сразу добавить в модуль формы глобальные переменные, в начало и конец модуля
![](/upload/iblock/7a3/7a34380e964ca160847ed533f82063b2.png)
![](/upload/iblock/fcf/fcf5fb58c48d9c9de02f5ea89d52dff4.png)
Добавим на форму командную панель для табличного поля (без автозаполнения, см. рис.), сначала команд не будет совсем, будем поочередно добавлять, так она выглядит в итоге.
![](/upload/iblock/e8f/e8ff1031c41c03de485f1463a8b65e93.png)
Добавляем кнопку добавления на ком. панель (рис.),
![](/upload/iblock/9eb/9eba18d6b09fe209703d84e447fde6ec.png)
с действием "КнопкаДобавитьИсточник",
![](/upload/iblock/d23/d2315c3a1a32589f10df4967f1bc9a73.png)
Процедура КнопкаДобавитьИсточник(Кнопка)
// Открыть диалог выбора файла .xls|.xlsx|.mxl
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите файл";
Диалог.Фильтр = "Файлы excel (*.xls, *.xlsx)|*.xls;*.xlsx|Табличный документ (*.mxl)|*.mxl";
Если Диалог.Выбрать() Тогда
ПутьКФайлу = Диалог.ПолноеИмяФайла;
ТабДокумент = Новый ТабличныйДокумент;
Попытка
ТабДокумент.Прочитать(ПутьКФайлу, СпособЧтенияЗначенийТабличногоДокумента.Значение);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Если ТабДокумент.Области.Количество() = 0 Тогда
Сообщить("Не найдено ни одной области данных для выборки в выбранном документе.");
Возврат;
КонецЕсли;
Если ПараметрыПодключений.Найти(ПутьКФайлу, "ПутьКФайлу") <> Неопределено Тогда
Предупреждение("Файл с таким расположением пути уже присутствует в списке.
|Сначала удалите предыдущий.");
Возврат;
КонецЕсли;
ПостроительЗапроса = Новый ПостроительЗапроса;
Попытка
ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДокумент.Область());
ПостроительЗапроса.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;
ПостроительЗапроса.ЗаполнитьНастройки();
ПостроительЗапроса.Выполнить();
Результат = ПолучитьНормализованнуюТаблицу(ПостроительЗапроса.Результат.Выгрузить());
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
Массив = Новый Массив;
Массив.Добавить("Все области данных"); // всегда по умолчанию
Для Каждого Область Из ТабДокумент.Области Цикл
Массив.Добавить(Область.Имя);
КонецЦикла;
НовоеИмя = ПодобратьУникальноеИмяПодключения("ИмяПодключения");
СоответствиеИменИОбластейИсточников.Вставить(НовоеИмя, Массив);
НоваяСтрока = ПараметрыПодключений.Добавить();
НоваяСтрока.Имя = НовоеИмя;
НоваяСтрока.ПутьКФайлу = ПутьКФайлу;
НоваяСтрока.ОбластьВыборки = Массив[0];
НоваяСтрока.Данные = Результат;
НоваяСтрока.Просмотр = "Просмотр";
// добавление в форму параметров
Параметры = ЭтаФорма.ВладелецФормы.мФормаПараметров.Параметры;
СтрокаПараметров = Параметры.Найти(НовоеИмя,"ИмяПараметра");
Если СтрокаПараметров = Неопределено Тогда
СтрокаПараметров = Параметры.Добавить();
СтрокаПараметров.ИмяПараметра = НовоеИмя;
СтрокаПараметров.ЗначениеПараметра = Результат;
КонецЕсли;
ЭлементыФормы.ПараметрыПодключений.ТекущаяСтрока = НоваяСтрока;
ЭлементыФормы.ПараметрыПодключений.ТекущаяКолонка = ЭлементыФормы.ПараметрыПодключений.Колонки.Имя;
ЭлементыФормы.ПараметрыПодключений.ИзменитьСтроку();
КонецЕсли;
КонецПроцедуры
добавляем следующую командную кнопку "Удалить", выбираем стандартное системное действие удаления, остальные стандартные команды по желанию.
![](/upload/iblock/6e7/6e72e9fe468c8a0d63eec4a40a8544e5.png)
Для табличного поля "ПараметрыПодключений" выставляем свойства и события как на рис.,
![](/upload/iblock/7f3/7f34bfe7ba985904fbc2ff33a38b54a9.png)
Код для события "ПараметрыПодключенийВыбор"
Процедура ПараметрыПодключенийВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
Если Колонка.Имя = "Просмотр" Тогда
Если мФормаПросмотраДанных.Открыта() Тогда
мФормаПросмотраДанных.Закрыть();
Иначе
// загрузим данные в таблицу на форме
мФормаПросмотраДанных.ЭлементыФормы.ТаблицаСДанными.Значение = ВыбраннаяСтрока.Данные;
мФормаПросмотраДанных.ЭлементыФормы.ТаблицаСДанными.СоздатьКолонки();
мФормаПросмотраДанных.Открыть();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Код для события "ПараметрыПодключенийПередУдалением"
Процедура ПараметрыПодключенийПередУдалением(Элемент, Отказ)
СоответствиеИменИОбластейИсточников.Удалить(Элемент.ТекущаяСтрока.Имя);
КонецПроцедуры
Код для события "ПараметрыПодключенийПриНачалеРедактирования"
Процедура ПараметрыПодключенийПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если Элемент.ТекущаяКолонка.Имя = "Имя" Тогда
ПредыдущееИмяПодключения = Элемент.ТекущаяСтрока.Имя;
КонецЕсли;
КонецПроцедуры
далее, добавляем колонки в таблицу:
- Колонка "Имя", тип "Строка", событие - "ОкончаниеВводаТекста"
![](/upload/iblock/28e/28e683d33b32f8649f028c3c492c69f9.png)
Код для события "ПараметрыПодключенийИмяОкончаниеВводаТекста"
Процедура ПараметрыПодключенийИмяОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)
Если ПредыдущееИмяПодключения <> Текст Тогда
// Проверить уникальность имени
Если ПараметрыПодключений.Найти(Текст, "Имя") <> Неопределено Тогда
СтандартнаяОбработка = Ложь;
Предупреждение("Такое имя уже используется.");
Значение = ПредыдущееИмяПодключения;
ЭлементыФормы.ПараметрыПодключений.ИзменитьСтроку();
Возврат;
КонецЕсли;
СоответствиеИменИОбластейИсточников.Вставить(Текст, СоответствиеИменИОбластейИсточников[ПредыдущееИмяПодключения]);
СоответствиеИменИОбластейИсточников.Удалить(ПредыдущееИмяПодключения);
КонецЕсли;
КонецПроцедуры
- Колонка "ПутьКФайлу", тип "Строка",
![](/upload/iblock/3f8/3f859c0e2d342cbb0241c9667ca2daa7.png)
- Колонка "ОбластьВыборки", тип "Строка", КнопкаСпискаВыбора "Истина", событие - "ПараметрыПодключенийОбластьВыборкиПриИзменении" и "ПараметрыПодключенийОбластьВыборкиНачалоВыбораИзСписка"
![](/upload/iblock/92b/92b2ba2395cfc4282390fdfd53d05f17.png)
Код для события "ПараметрыПодключенийОбластьВыборкиПриИзменении"
Процедура ПараметрыПодключенийОбластьВыборкиПриИзменении(Элемент)
ЭлементыФормы.ПараметрыПодключений.ЗакончитьРедактированиеСтроки(Ложь);
Если мФормаПросмотраДанных.Открыта() Тогда
мФормаПросмотраДанных.Закрыть();
КонецЕсли;
// Заново сформировать данные построителем
ТабДокумент = Новый ТабличныйДокумент;
Попытка
ТабДокумент.Прочитать(ЭлементыФормы.ПараметрыПодключений.ТекущаяСтрока.ПутьКФайлу, СпособЧтенияЗначенийТабличногоДокумента.Значение);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
ОбластьСтрокой = ЭлементыФормы.ПараметрыПодключений.ТекущаяСтрока.ОбластьВыборки;
ТекущаяОбласть = Неопределено;
Если ОбластьСтрокой = "Все области данных" Тогда
ТекущаяОбласть = ТабДокумент.Область();
Иначе
ТекущаяОбласть = ТабДокумент.Область(ОбластьСтрокой);
КонецЕсли;
ПостроительЗапроса = Новый ПостроительЗапроса;
Попытка
ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТекущаяОбласть);
ПостроительЗапроса.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;
ПостроительЗапроса.ЗаполнитьНастройки();
ПостроительЗапроса.Выполнить();
Результат = ПолучитьНормализованнуюТаблицу(ПостроительЗапроса.Результат.Выгрузить());
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
ЭлементыФормы.ПараметрыПодключений.ТекущаяСтрока.Данные = Результат;
КонецПроцедуры
Код для события "ПараметрыПодключенийОбластьВыборкиНачалоВыбораИзСписка"
Процедура ПараметрыПодключенийОбластьВыборкиНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
МассивОбластейИсточника = СоответствиеИменИОбластейИсточников[ЭлементыФормы.ПараметрыПодключений.ТекущаяСтрока.Имя];
// Заполнить массив областями из соответствия
ЭлементыФормы.ПараметрыПодключений.Колонки.ОбластьВыборки.ЭлементУправления.СписокВыбора.ЗагрузитьЗначения(МассивОбластейИсточника);
КонецПроцедуры
- Колонка "Просмотр", тип "Строка", Гиперссылка "Истина", РежимРедактирования "Непосредственно".
![](/upload/iblock/0cd/0cd1c12518ca17c51b6cd8c89a113866.png)
Полный листинг модуля формы внешних источников
Перем СоответствиеИменИОбластейИсточников;
Перем ПредыдущееИмяПодключения;
Перем мФормаПросмотраДанных;
Процедура КнопкаДобавитьИсточник(Кнопка)
// Открыть диалог выбора файла .xls|.xlsx|.mxl
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите файл";
Диалог.Фильтр = "Файлы excel (*.xls, *.xlsx)|*.xls;*.xlsx|Табличный документ (*.mxl)|*.mxl";
Если Диалог.Выбрать() Тогда
ПутьКФайлу = Диалог.ПолноеИмяФайла;
ТабДокумент = Новый ТабличныйДокумент;
Попытка
ТабДокумент.Прочитать(ПутьКФайлу, СпособЧтенияЗначенийТабличногоДокумента.Значение);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Если ТабДокумент.Области.Количество() = 0 Тогда
Сообщить("Не найдено ни одной области данных для выборки в выбранном документе.");
Возврат;
КонецЕсли;
Если ПараметрыПодключений.Найти(ПутьКФайлу, "ПутьКФайлу") <> Неопределено Тогда
Предупреждение("Файл с таким расположением пути уже присутствует в списке.
|Сначала удалите предыдущий.");
Возврат;
КонецЕсли;
ПостроительЗапроса = Новый ПостроительЗапроса;
Попытка
ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДокумент.Область());
ПостроительЗапроса.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;
ПостроительЗапроса.ЗаполнитьНастройки();
ПостроительЗапроса.Выполнить();
Результат = ПолучитьНормализованнуюТаблицу(ПостроительЗапроса.Результат.Выгрузить());
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
Массив = Новый Массив;
Массив.Добавить("Все области данных"); // всегда по умолчанию
Для Каждого Область Из ТабДокумент.Области Цикл
Массив.Добавить(Область.Имя);
КонецЦикла;
НовоеИмя = ПодобратьУникальноеИмяПодключения("ИмяПодключения");
СоответствиеИменИОбластейИсточников.Вставить(НовоеИмя, Массив);
НоваяСтрока = ПараметрыПодключений.Добавить();
НоваяСтрока.Имя = НовоеИмя;
НоваяСтрока.ПутьКФайлу = ПутьКФайлу;
НоваяСтрока.ОбластьВыборки = Массив[0];
НоваяСтрока.Данные = Результат;
НоваяСтрока.Просмотр = "Просмотр";
// добавление в форму параметров
Параметры = ЭтаФорма.ВладелецФормы.мФормаПараметров.Параметры;
СтрокаПараметров = Параметры.Найти(НовоеИмя,"ИмяПараметра");
Если СтрокаПараметров = Неопределено Тогда
СтрокаПараметров = Параметры.Добавить();
СтрокаПараметров.ИмяПараметра = НовоеИмя;
СтрокаПараметров.ЗначениеПараметра = Результат;
КонецЕсли;
ЭлементыФормы.ПараметрыПодключений.ТекущаяСтрока = НоваяСтрока;
ЭлементыФормы.ПараметрыПодключений.ТекущаяКолонка = ЭлементыФормы.ПараметрыПодключений.Колонки.Имя;
ЭлементыФормы.ПараметрыПодключений.ИзменитьСтроку();
КонецЕсли;
КонецПроцедуры
Функция ПолучитьНормализованнуюТаблицу(Источник)
// Скопируем вручную исходную таблицу в новую без типов Null
НормализованнаяКопия = Новый ТаблицаЗначений;
Для Каждого Колонка Из Источник.Колонки Цикл
МассивТипов = Колонка.ТипЗначения.Типы();
НоваяКолонка = НормализованнаяКопия.Колонки.Добавить(
Колонка.Имя,
Новый ОписаниеТипов(Колонка.ТипЗначения,, "Null"),
Колонка.Заголовок,
Колонка.Ширина);
КонецЦикла;
Для Каждого Строка Из Источник Цикл
ЗаполнитьЗначенияСвойств(НормализованнаяКопия.Добавить(), Строка);
КонецЦикла;
Источник.Очистить();
Возврат НормализованнаяКопия;
КонецФункции
Функция ПодобратьУникальноеИмяПодключения(ШаблонСтрока, Знач НомерПопыткиПоиска = 0)
ПопыткаПоиска = НомерПопыткиПоиска;
ПопыткаПоискаСтрокой = ?(ПопыткаПоиска = 0, "", Строка(ПопыткаПоиска));
Если ПараметрыПодключений.Найти(ШаблонСтрока + ПопыткаПоискаСтрокой, "Имя") <> Неопределено Тогда
ПопыткаПоиска = ПопыткаПоиска + 1;
ПопыткаПоискаСтрокой = Строка(ПопыткаПоиска);
Возврат ПодобратьУникальноеИмяПодключения(ШаблонСтрока, ПопыткаПоиска);
КонецЕсли;
Возврат ШаблонСтрока + ПопыткаПоискаСтрокой;
КонецФункции
Процедура ПараметрыПодключенийОбластьВыборкиНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
МассивОбластейИсточника = СоответствиеИменИОбластейИсточников[ЭлементыФормы.ПараметрыПодключений.ТекущаяСтрока.Имя];
// Заполнить массив областями из соответствия
ЭлементыФормы.ПараметрыПодключений.Колонки.ОбластьВыборки.ЭлементУправления.СписокВыбора.ЗагрузитьЗначения(МассивОбластейИсточника);
КонецПроцедуры
Процедура ПараметрыПодключенийОбластьВыборкиПриИзменении(Элемент)
ЭлементыФормы.ПараметрыПодключений.ЗакончитьРедактированиеСтроки(Ложь);
Если мФормаПросмотраДанных.Открыта() Тогда
мФормаПросмотраДанных.Закрыть();
КонецЕсли;
// Заново сформировать данные построителем
ТабДокумент = Новый ТабличныйДокумент;
Попытка
ТабДокумент.Прочитать(ЭлементыФормы.ПараметрыПодключений.ТекущаяСтрока.ПутьКФайлу, СпособЧтенияЗначенийТабличногоДокумента.Значение);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
ОбластьСтрокой = ЭлементыФормы.ПараметрыПодключений.ТекущаяСтрока.ОбластьВыборки;
ТекущаяОбласть = Неопределено;
Если ОбластьСтрокой = "Все области данных" Тогда
ТекущаяОбласть = ТабДокумент.Область();
Иначе
ТекущаяОбласть = ТабДокумент.Область(ОбластьСтрокой);
КонецЕсли;
ПостроительЗапроса = Новый ПостроительЗапроса;
Попытка
ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТекущаяОбласть);
ПостроительЗапроса.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;
ПостроительЗапроса.ЗаполнитьНастройки();
ПостроительЗапроса.Выполнить();
Результат = ПолучитьНормализованнуюТаблицу(ПостроительЗапроса.Результат.Выгрузить());
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
ЭлементыФормы.ПараметрыПодключений.ТекущаяСтрока.Данные = Результат;
КонецПроцедуры
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
Если ПараметрыПодключений.Колонки.Найти("Данные") = Неопределено Тогда
ПараметрыПодключений.Колонки.Добавить("Данные", Новый ОписаниеТипов("ТаблицаЗначений")); // для хранения загруженных данных
КонецЕсли;
КонецПроцедуры
Процедура ПараметрыПодключенийИмяОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)
Если ПредыдущееИмяПодключения <> Текст Тогда
// Проверить уникальность имени
Если ПараметрыПодключений.Найти(Текст, "Имя") <> Неопределено Тогда
СтандартнаяОбработка = Ложь;
Предупреждение("Такое имя уже используется.");
Значение = ПредыдущееИмяПодключения;
ЭлементыФормы.ПараметрыПодключений.ИзменитьСтроку();
Возврат;
КонецЕсли;
СоответствиеИменИОбластейИсточников.Вставить(Текст, СоответствиеИменИОбластейИсточников[ПредыдущееИмяПодключения]);
СоответствиеИменИОбластейИсточников.Удалить(ПредыдущееИмяПодключения);
КонецЕсли;
КонецПроцедуры
Процедура ПараметрыПодключенийПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если Элемент.ТекущаяКолонка.Имя = "Имя" Тогда
ПредыдущееИмяПодключения = Элемент.ТекущаяСтрока.Имя;
КонецЕсли;
КонецПроцедуры
Процедура ПараметрыПодключенийВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
Если Колонка.Имя = "Просмотр" Тогда
Если мФормаПросмотраДанных.Открыта() Тогда
мФормаПросмотраДанных.Закрыть();
Иначе
// загрузим данные в таблицу на форме
мФормаПросмотраДанных.ЭлементыФормы.ТаблицаСДанными.Значение = ВыбраннаяСтрока.Данные;
мФормаПросмотраДанных.ЭлементыФормы.ТаблицаСДанными.СоздатьКолонки();
мФормаПросмотраДанных.Открыть();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ПараметрыПодключенийПередУдалением(Элемент, Отказ)
СоответствиеИменИОбластейИсточников.Удалить(Элемент.ТекущаяСтрока.Имя);
КонецПроцедуры
// Ключ - имя подключения, Значение - массив с областями источника подключения
СоответствиеИменИОбластейИсточников = Новый Соответствие;
ПредыдущееИмяПодключения = "";
мФормаПросмотраДанных = ОбработкаОбъект.ПолучитьФорму("ФормаТаблицаСданнымиВнешнегоИсточника", ЭтаФорма);
3. Финальная часть, возвращаемся в основную форму обработки, добавляем оставшийся код в процедуру "ВыполнитьЗапрос()",
![](/upload/iblock/bcd/bcd12bea1c20d73aa8a21e0f9a511b14.png)
весь код процедуры "ВыполнитьЗапрос()":
Процедура ВыполнитьЗапрос()
вСохранитьЗапросТекущейСтроки();
ОбъектЗапрос = Новый Запрос;
Для каждого СтрокаПараметров Из мФормаПараметров.Параметры Цикл
Если СтрокаПараметров.ЭтоВыражение Тогда
ОбъектЗапрос.УстановитьПараметр(СтрокаПараметров.ИмяПараметра, Вычислить(СтрокаПараметров.ЗначениеПараметра));
Иначе
ОбъектЗапрос.УстановитьПараметр(СтрокаПараметров.ИмяПараметра, СтрокаПараметров.ЗначениеПараметра);
// mairon меанир
// найти имя параметра в форме внешних источников, проверить тип на "ТаблицаЗначений" и установить данные параметра
Если мФормаВнешнихИсточников.ПараметрыПодключений.Найти(СтрокаПараметров.ИмяПараметра, "Имя") <> Неопределено
И СтрокаПараметров.ЗначениеПараметра = "ТаблицаЗначений" Тогда
ОбъектЗапрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ОбъектЗапрос.УстановитьПараметр(СтрокаПараметров.ИмяПараметра,
мФормаВнешнихИсточников.ПараметрыПодключений.Найти(СтрокаПараметров.ИмяПараметра, "Имя").Данные);
КонецЕсли;
КонецЕсли;
КонецЦикла;
ОбъектЗапрос.Текст = СтрЗаменить(вПолучитьТекстЗапроса(Истина), "|", "");
Если ПустаяСтрока(ОбъектЗапрос.Текст) Тогда
Предупреждение("Не заполнен текст запроса!", 30);
Возврат;
КонецЕсли;
ДатаНачала = ТекущаяДата();
Попытка
мРезЗапроса = ОбъектЗапрос.Выполнить();
ДатаКонцаВыполнения = ТекущаяДата();
мТаблицаЗагружена = Ложь;
мСводнаяТаблицаЗагружена = Ложь;
вЗагрузитьРезультат();
ДатаКонца = ТекущаяДата();
Исключение
Предупреждение(Сред(ОписаниеОшибки(),69));
КонецПопытки;
КонецПроцедуры // ВыполнитьЗапрос()
Описание работы и нюансы:
для файлов .mxl необходимо иметь имя области, хотя бы одно (имя области можно назначить прямо в режиме предприятия)
![](/upload/iblock/9b1/9b17287b92dbad9306c64c0ca7ed38eb.png)
![](/upload/iblock/bab/bab020a27f65f6a4d0e4ff5d19e31a52.png)
для файлов excel области - это листы,
первой строчкой всегда определяются названия колонок, потом данные.
При добавлении подключения формируется уникальное Имя подключения, - это название параметра запроса, которое необходимо использовать в кач-ве параметра таблицы значений, т.е имя подключения должно совпадать с именем параметра в форме параметров запроса.
по гиперссылке в колонке "просмотр" можно смотреть какие данные были загружены и править их при необходимости (вручную прямо в таблице, отсюда они попадут в запрос).
![](/upload/iblock/d02/d022f368ed2cf5cdb1a61e7c5401926e.png)
![](//infostart.ru/upload/iblock/5c3/5c34b482904752d58d53edfee8543993.png)
Далее, необходимо сформировать шаблон текста запроса для вытягивания данных из параметра таблицы значений:
ВЫБРАТЬ
*
ПОМЕСТИТЬ ВТ
ИЗ
&ИмяПодключения КАК ИмяПодключения
![](/upload/iblock/1dc/1dccbd570b6f15e723e127eb7f6eda45.png)
Доработка и тестирование производилось на платформе версии 8.3.18.