Snippets

Василий Котов Загрузка в Excel

Created by Василий Котов
&НаКлиенте
Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	
	ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	
	ДиалогВыбораФайла.Показать(Новый ОписаниеОповещения("ОбработкаВыбораФайлов", ЭтаФорма));
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаВыбораФайлов(СписокФайлов, ДополнительныеПараметры) Экспорт
	
	ПутьКФайлу = СписокФайлов[0];
	
КонецПроцедуры // ()

&НаКлиенте
Процедура ЗаполнитьExcel()
	
	Попытка	       
        COMОбъект = Новый COMОбъект("Excel.Application");   
	Исключение
		СообщениеОбОшибке = НСтр("ru = 'Не удалось загрузить данные из файла Excel.
		                               |Убедитесь, что на сервере установлена программа Microsoft Excel.
		                               |Подробности:'")
		                    + КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
		ВызватьИсключение СообщениеОбОшибке;
	КонецПопытки;
	
	Попытка
		Workbook      = COMОбъект.Workbooks.Open(ПутьКФайлу);
		Sheet         = Workbook.Worksheets("Orders");
		SheetVehicles         = Workbook.Worksheets("Vehicles");
	Исключение
		COMОбъект.Quit();
		COMОбъект = 0;
		СообщениеОбОшибке = НСтр("ru = 'Не удалось прочитать данные из файла. Подробности:'") + " "
		                    + КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
		ВызватьИсключение СообщениеОбОшибке;
	КонецПопытки;
	
	// Загрузка данных
	Попытка
		
		Данные = Данные();
		
		НомерСтроки = 4;
		Для каждого Заказ из Данные.Заказы Цикл
			
			Sheet.Cells(НомерСтроки, 1).Value = Заказ.Заказ;  //Номер заказа
			Sheet.Cells(НомерСтроки, 4).Value = Заказ.КонтрагентНаименование;
			Sheet.Cells(НомерСтроки, 5).Value = Заказ.Адрес;
			Sheet.Cells(НомерСтроки, 7).Value = Заказ.ВремянноеОкно;
			Sheet.Cells(НомерСтроки, 9).Value = Заказ.ВремяОбслуживанияАдрес;
			Sheet.Cells(НомерСтроки, 10).Value = Заказ.ВремяОбслуживанияЗаказ;
			Sheet.Cells(НомерСтроки, 11).Value = Заказ.Вес;
			НомерСтроки = НомерСтроки + 1;
			
		КонецЦикла;
		
		НомерСтроки = 5;  
		Для каждого Транспорт из Данные.Транспорт Цикл
			
			SheetVehicles.Cells(НомерСтроки, 2).Value = Транспорт.Номер;  //Номер машины
			SheetVehicles.Cells(НомерСтроки, 3).Value = Транспорт.Грузоподъемность;  //Грузоподъемность
			SheetVehicles.Cells(НомерСтроки, 18).Value = Транспорт.ВозвратНаСклад;
			SheetVehicles.Cells(НомерСтроки, 22).Value = Транспорт.ВремяНачалаКонцаСмены;  
			НомерСтроки = НомерСтроки + 1;
			
		КонецЦикла; 
		
		Workbook.Save();
		COMОбъект.Visible = Истина;
		
	Исключение
		COMОбъект.Quit();
		COMОбъект = 0;
		СообщениеОбОшибке = НСтр("ru = 'Не удалось прочитать данные из файла. Подробности:'") + " "
		                    + КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
		ВызватьИсключение СообщениеОбОшибке;
	КонецПопытки;
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Функция КолонкиТранспорт()

	Возврат Новый Структура("Номер, Грузоподъемность, ВозвратНаСклад, ВремяНачалаКонцаСмены");

КонецФункции // ()

&НаКлиентеНаСервереБезКонтекста
Функция КолонкиЗаказ()

	Возврат Новый Структура("Заказ, КонтрагентНаименование,
							|Адрес, ВремянноеОкно, ВремяОбслуживанияАдрес, 
							|ВремяОбслуживанияЗаказ, Вес");

КонецФункции // ()

&НаСервере
Функция Данные()

	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ТранспортныеСредства.Ссылка КАК Ссылка,
		|	ТранспортныеСредства.Код КАК Номер,
		|	ТранспортныеСредства.Наименование КАК Наименование,
		|	ТранспортныеСредства.ГрузоподъемностьВТоннах * 1000 КАК Грузоподъемность,
		|	ТранспортныеСредства.ВместимостьВКубическихМетрах КАК ВместимостьВКубическихМетрах,
		|	""09:00 - 18:00"" КАК ВозвратНаСклад,
		|	""TRUE"" КАК ВремяНачалаКонцаСмены
		|ИЗ
		|	Справочник.ТранспортныеСредства КАК ТранспортныеСредства
		|ГДЕ
		|	ТранспортныеСредства.ГрузоподъемностьВТоннах > 0
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	ЗаказКлиента.Ссылка КАК Ссылка,
		|	ЗаказКлиента.Номер КАК Заказ,
		|	ЗаказКлиента.Контрагент.Наименование КАК КонтрагентНаименование,
		|	ЗаказКлиента.АдресДоставки КАК Адрес,
		|	СУММА(ВЫБОР
		|			КОГДА ЗаказКлиентаТовары.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиНоменклатуры.ПустаяСсылка)
		|					ИЛИ ЗаказКлиентаТовары.Упаковка.Вес = 0
		|				ТОГДА ЗаказКлиентаТовары.Номенклатура.Вес
		|			ИНАЧЕ ЗаказКлиентаТовары.Упаковка.Вес
		|		КОНЕЦ * ЗаказКлиентаТовары.КоличествоУпаковок) КАК Вес,
		|	""09:00 - 18:00"" КАК ВремянноеОкно,
		|	600 КАК ВремяОбслуживанияАдрес,
		|	120 КАК ВремяОбслуживанияЗаказ
		|ИЗ
		|	Документ.ЗаказКлиента КАК ЗаказКлиента
		|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
		|		ПО ЗаказКлиента.Ссылка = ЗаказКлиентаТовары.Ссылка
		|ГДЕ
		|	ЗаказКлиента.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
		|	И ЗаказКлиента.Проведен = ИСТИНА
		|
		|СГРУППИРОВАТЬ ПО
		|	ЗаказКлиента.Ссылка,
		|	ЗаказКлиента.Номер,
		|	ЗаказКлиента.Контрагент.Наименование,
		|	ЗаказКлиента.АдресДоставки";
	
	Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ТекущаяДата()));
	Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(ТекущаяДата()));
	
	РезультатЗапроса = Запрос.ВыполнитьПакет();
	
	Транспорт = РезультатЗапроса[0].Выгрузить();
	Заказы = РезультатЗапроса[1].Выгрузить();
	СписокЗаказов = Новый Массив;
	СписокТранспорта = Новый Массив;
	
	Для каждого ТранспортСтрока Из Транспорт Цикл
	
       Транспорт = КолонкиТранспорт();
	   ЗаполнитьЗначенияСвойств(Транспорт, ТранспортСтрока);
	   СписокТранспорта.Добавить(Транспорт);

	КонецЦикла; 
	
	Для каждого ЗаказСтрока Из Заказы Цикл
	
       Заказ = КолонкиЗаказ();
	   ЗаполнитьЗначенияСвойств(Заказ, ЗаказСтрока);
	   СписокЗаказов.Добавить(Заказ);

   КонецЦикла; 
   
   Возврат Новый Структура("Заказы, Транспорт", СписокЗаказов, СписокТранспорта);

КонецФункции // ()
 
&НаКлиенте
Процедура Заполнить(Команда)
	ЗаполнитьExcel();
КонецПроцедуры  


Comments (0)

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.