|   |   | 
| 
 | Выгрузка табличного документа в 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) а никто и не обещал легкой жизни)     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |