Имя: Пароль:
1C
1С v8
Выгрузка табличного документа в excel
↓ (Волшебник 02.12.2024 11:45)
0 Elena_I
 
02.12.24
11:46
Добрый день! Передо мной стоит задача, оптимизировать выгрузку отчета из 1с в excel. Есть стандартная команда на "ФормаОтчета" сохранить. Которая, соответственно, сохраняет отчет в excel
Так как стандартную команду я не могу дописать, решила сделать свой механизм вывода. Он отрабатывает корректно, табличный документ выводит. Проблема в том, что так и не поняла как его оптимизировать...

Прилагаю свой код:

&НаКлиенте
Процедура ОсновныеДействияФормыДействие(Команда)
	
	ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
	
	ДиалогОткрытияФайла.Каталог = КаталогВременныхФайлов();																  
	ДиалогОткрытияФайла.Фильтр = "Файлы Microsoft Excel (*.xlsx)|*.xlsx|Все файлы (*.*)|*.*";
	ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
	
	Если ДиалогОткрытияФайла.Выбрать() Тогда
		Попытка
			НастройкаТабДокумента();
			
			ЭтотОбъект.ОтчетТабличныйДокумент.Записать(ДиалогОткрытияФайла.ПолноеИмяФайла,ТипФайлаТабличногоДокумента.XLSX);
			
			ДокExcel = Новый COMОбъект("Excel.Application");
			ДокExcel.Visible = 1;
			ДокExcel.EnableEvents = 0;					   
			
			ДокExcel.Workbooks.Open(ДиалогОткрытияФайла.ПолноеИмяФайла);
			
			// тестовая область
			Лист = ДокExcel.WorkSheets(1);
			ВсегоКолонок = Лист.Cells(1, 1).SpecialCells(11).Column;
			ВсегоСтрок = Лист.Cells(1, 1).SpecialCells(11).Row;
			
			Диапазон = Лист.Range(Лист.Cells(1, 1), Лист.Cells(ВсегоСтрок, ВсегоКолонок));
			Данные = Диапазон.Value.Выгрузить();
			// тестовая область
			
		Исключение
			Сообщить("Excel на компьютере не найден. Необходимо выполнить установку/переустановку Excel.");
		КонецПопытки;
	КонецЕсли;	 
	
КонецПроцедуры


&НаСервере
Функция НастройкаТабДокумента()
	
	ОтчетТабличныйДокумент.ОтображатьГруппировки = Ложь; 
	ОтчетТабличныйДокумент.ОтображатьЗаголовки = Ложь;
	ОтчетТабличныйДокумент.ОтображатьСетку = Ложь;
	
	Если ОтчетТабличныйДокумент.ВысотаСтраницы > ОтчетТабличныйДокумент.ВысотаТаблицы Тогда
		ОтчетТабличныйДокумент.ВысотаСтраницы = ОтчетТабличныйДокумент.ВысотаТаблицы + 5;
	КонецЕсли;
	
	Если ОтчетТабличныйДокумент.ШиринаСтраницы > ОтчетТабличныйДокумент.ШиринаТаблицы Тогда 
		ОтчетТабличныйДокумент.ШиринаСтраницы = ОтчетТабличныйДокумент.ШиринаТаблицы + 5;
	КонецЕсли;
		
КонецФункции


Проблема следующая. Возможности оптимизировать сам таб.документ, как я поняла, полностью нет(возможно я ошиблась, конечно)
Остается только excel
Но большую часть действий с самим excel документом я могу делать только после его открытия. Следовательно не понятно, а что там оптимизировать, уже после его открытия?
Прошу помощи с данной ситуацией, так как на просторах интернета я нашла информация только о выгрузки данных из excel в 1с
1 Ногаминебить
 
02.12.24
11:42
Ну может оптимизировать формирование отчета? Вот это через ком точно не про оптимизацию.
2 shuhard
 
02.12.24
11:43
(0) вопрос не по адресу, задай его постановщику задачи
3 Elena_I
 
02.12.24
11:43
(1) Проблема в том, что механизм который я должна разработать, должен работать самостоятельно по оптимизации, что бы не пришлось переписывать/дописывать все отчеты которые есть сейчас, а так же будущие
4 СвинТуз
 
02.12.24
11:44
(0)
Вечер перестает быть томным.

)))
Скучно на работе?
5 Волшебник
 
02.12.24
11:44
(0) Не надо ничего оптимизировать. Я снимаю задачу.
6 Волшебник
 
02.12.24
11:44
(3) Вы узнали новое слово "оптимизировать"? Ну так забудьте его и идите работу работать.
7 СвинТуз
 
02.12.24
11:44
Ведуны бают, что при готовом отчете это одна команда?
Врут?
8 Волшебник
 
02.12.24
11:46
(7)
ТД.Записать(Файл, ТипФайлаТабличногоДокумента.XLSX)
9 СвинТуз
 
02.12.24
11:46
(6) (0)
"оптимизировать"

Ой ... Не запоминайте это слово. А то запомните и вся оперативная память занята.
10 shuhard
 
02.12.24
11:46
(3)[должен работать самостоятельно по оптимизации]
горячечный бред, врача в топик
11 Волшебник
 
02.12.24
11:46
сегодня какое-то нашествие ботов
12 Ногаминебить
 
02.12.24
11:46
(8) Можно оптимизировать красивыми отступами и комментариями.
13 СвинТуз
 
02.12.24
11:47
(0)
Спасибо. Рассмешили. Пишите еще.
14 Elena_I
 
02.12.24
11:48
А в чем собственн проблема данного вопроса? Я не понимаю
15 Волшебник
 
02.12.24
11:50
(14) Идите-идите.
16 osa1C
 
02.12.24
12:02
(0) Оптимизация тут - это убрать com-соединение. Смотри тут
https://infostart.ru/1c/tools/149432/
17 DrShad
 
02.12.24
12:04
(10) я уже тут
18 СвинТуз
 
02.12.24
12:05
(14)
Есть встроенная в 1с команда сохранения отчета сформированного в 1с в формате эксель.
Смотрите (8)

Сложно понять как одну команду можно сделать более простой.
19 СвинТуз
 
02.12.24
12:07
(16)
Не потянет.
12-й дата статьи. Толстый клиент.
Где клиент, где сервер. Не поймет.
20 StanLee
 
02.12.24
12:31
(0) ниче не понял что тут оптимизировать.. скорость сохранения в xls? внешний вид таблички не устраивает? оптимизация рабочего времени когда заняться нечем? должен сохраняться автоматом в нужную папку? вам все задачи на работе так ставятся что нифига непонятно, может сначала текст задачи оптимизировать?
21 Мультук
 
02.12.24
12:37
(0)

Записали отчёт в XLSX
            
			
ЭтотОбъект.ОтчетТабличныйДокумент.Записать(ДиалогОткрытияФайла.ПолноеИмяФайла,ТипФайлаТабличногоДокумента.XLSX);
            

Открыли COMОбъект
Открыли в этом ДокExcel наш  файл
Выбрали область, выгрузили область в Данные

и.....

Них@я дальше не происходит. Весь этот код нихрена не делает полезного.

Возникает вопрос. А ради чего всё это.

			ДокExcel = Новый COMОбъект("Excel.Application");
			ДокExcel.Visible = 1;
			ДокExcel.EnableEvents = 0;					   
			
			ДокExcel.Workbooks.Open(ДиалогОткрытияФайла.ПолноеИмяФайла);
			
			// тестовая область
			Лист = ДокExcel.WorkSheets(1);
			ВсегоКолонок = Лист.Cells(1, 1).SpecialCells(11).Column;
			ВсегоСтрок = Лист.Cells(1, 1).SpecialCells(11).Row;
			
			Диапазон = Лист.Range(Лист.Cells(1, 1), Лист.Cells(ВсегоСтрок, ВсегоКолонок));
			Данные = Диапазон.Value.Выгрузить();
			// тестовая область
22 Волшебник
 
02.12.24
12:50
(21) Предлагаю ещё добавить цикл
23 Pprog151713
 
02.12.24
14:31
(0) Все уже оптимизировано в 1с. Файл/Сохранить как/. xls. И прикинь будет все тоже самое......
24 Климов Сергей
 
02.12.24
15:00
(0) Однажды, в далёкой-далёкой галактике мне нужно было ОЧЕНЬ БОЛЬШОЙ табличный документ сохранять в xls. Платформа тогда этого ещё не умела. Построчная формирование листа через COM шло ОЧЕНЬ долго. Тогда я исхитрился программно поместить всю таблицу в буфер обмена и в экселе её вставить. Деталей, увы, не помню.
25 Волшебник
 
02.12.24
16:13
(24) Ну как-то так: WSH.SendKeys Ctrl-A, Ctrl-C
26 craxx
 
02.12.24
17:30
(8) (12) если уж совсем оптимизировать, то можно вспомнить, что xlsx это архив xml и медиа, и писать в xml в соответствующем формат, а потом зазиповать и переименовать расширение
27 Волшебник
 
02.12.24
18:31
(26) описание формата занимает 7000 стр
28 craxx
 
03.12.24
05:57
(27) а никто и не обещал легкой жизни)
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс