Простой способ выгрузки в таблицу Excel

06 июня 2013

Файлы для загрузки:

Обработка с примером из статьи

Стандартная задача

Кладовщику нужно выгрузить список всей номенклатуры, у которой не установлена пометка удаления. Поля для выгрузки:

  1. Наименование.
  2. Артикул.
  3. Вид номенклатуры.
  4. Тип номенклатуры.
Вот так будет выглядеть таблица Excel после выгрузки:
Рассмотрим два способа решения: без программирования и с участием программиста.

Программируем

Чтобы выгрузить номенклатуру в XLS-файл сформируем запрос к базе данных для получения номенклатуры и поместим результат в табличную часть обработки выгрузки. Вот форма обработки:

По нажатию на кнопку "Заполнить" заполняется табличная часть "ДанныеВыгрузки" обработки, у которой добавлены соответствующие реквизиты. Обработчик этой кнопки имеет следующий программный код:

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

КонецПроцедуры
Здесь все должно быть понятно. Самое интересное начинается по нажатию на кнопку "Сохранить". Сначала вызывается диалог выбора пути для сохранения таблицы XLS. Затем, используя данные в табличной части обработки, заполняется табличный документ по созданному ранее макету. Макет, добавленный в обработку, следующий:
Полный код обработчика кнопки "Сохранить" представлен на следующем листинге:
роцедура ОсновныеДействияФормыДействие(Кнопка)
	// Вызываем диалог выбора файла для сохранения XLS-таблицы
	Режим = РежимДиалогаВыбораФайла.Сохранение;
	ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
	ДиалогОткрытияФайла.ПолноеИмяФайла = "";
	ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
	Текст = "ru = ""Таблица XLS""; en = ""XLS table""";
	Фильтр = НСтр(Текст)+"(*.xls)|*.xls";
	ДиалогОткрытияФайла.Фильтр = Фильтр;
	ДиалогОткрытияФайла.Заголовок = "Выберите путь для сохранения";
	Если ДиалогОткрытияФайла.Выбрать() Тогда
		ПутьКФайлу = ДиалогОткрытияФайла.ПолноеИмяФайла;
	Иначе
		Текст = "Путь сохранения не выбран!";
		Предупреждение(Текст);
		Возврат;
	КонецЕсли;	
	// Создаем табличный документ
	ТаблицаСохранение = Новый ТабличныйДокумент;
	// Получаем макет заполнения и области макета
	Макет = ЭтотОбъект.ПолучитьМакет("ТаблицаВыгрузки");
	ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
	ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
	// Выводим данные в табличный документ 
	ТаблицаСохранение.Вывести(ОбластьШапка);
	Для Каждого Стр Из ДанныеВыгрузки Цикл
		ЗаполнитьЗначенияСвойств(ОбластьСтрока.Параметры, Стр);
		ТаблицаСохранение.Вывести(ОбластьСтрока);
	КонецЦикла;
	// Сохраняем табличный документ на диск 
	ТаблицаСохранение.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLS);   	
КонецПроцедуры

После сохранения, на диске буде файл таблицы Excel со списком выгруженной номенклатуры. Пример файла Вы могли видеть в начале статьи.

Пользователь может сам

На самом деле участи программиста для подобной задачи не нужно. Пользователь все сам может сделать без каких-либо хитростей.

Например, перейдя в список номенклатуры и выполнив команду "Все действия" -> "Вывести список" из списка номенклатуры, пользователь получит список номенклатуры в сформированном табличном документе.

После того, как табличный документ будет сформирован, нажав на кнопку "Сохранить" или через меню "Файл->Сохранить" пользователь может записать табличный документ в файл XLS указав его имя и конечный каталог.

Вот и все! Никакой обработки для выгрузки не нужно. Конечно, если у вас достаточно простой случай с выгрузкой данных.

Так все просто?

Действительно все просто, никаких внешних компонент подключать не нужно. К тому же, мы можем выполнить выгрузку таким способом не только в файлы формата таблиц Excel, но и другие форматы, поддерживаемые платформой.


comments powered by Disqus