Выгрузка из табличной части документа 1С в Excel

1. AndrewUs 13 10.09.18 16:05 Сейчас в теме
Здравствуйте!
Пытаюсь программным способом реализовать выгрузку строк тч документа в Excel. При выгрузке файл Excel создается, но не заполняется. А при открытии вверку документа появляется сообщение: "Защищенный просмотр. Обнаружена проблема с этим файлом. Редактирование может повредить компьютер. Щелкните для получения дополнительных сведений."

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

	Excel = Новый COMОбъект("Excel.Application");
	Excel.WorkBooks.Add();  //Имя файла
	Состояние("Создание файла Microsoft Excel...");
	ExcelЛист = Excel.Sheets(1);  //Номер листа Excel

	
	ActiveCell = Excel.ActiveCell.SpecialCells(xlLastCell);
	RowCount = ActiveCell.Row;  		//Строчек
	ColumnCount = ActiveCell.Column;
	
	ТаблицаСохранение = Новый ТабличныйДокумент;

	Для Каждого Стр Из Объект.Список Цикл
		
		Для Row = 2 По RowCount Цикл
		
		//Если Не ЗначениеЗаполнено(Стр.ЛицевойСчетДоп) Тогда
		
		    ExcelЛист.Cells(Row,3).Value = Стр.Сумма;
			ExcelЛист.Cells(Row,2).Value = Стр.ЛицевойСчет;
			
			
			//Сообщить(Стр.ЛицевойСчет);
		//КонецЕсли;
		КонецЦикла;

	КонецЦикла;
	
	ТаблицаСохранение.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLS);
	Excel.WorkBooks.Close();
	Excel.Quit();

КонецПроцедуры
Показать


Как исправить подобную ситуацию?
Помогите, пожалуйста, с реализацией хотелки.
Спасибо.
По теме из базы знаний
Найденные решения
2. Boneman 301 10.09.18 16:16 Сейчас в теме
(1) зачем ты вообще подключаешься к экселю, если записываешь табличный документ ?
Убирай всю эту чачу с excel.application

и кури программное заполнение табличного документа. Например вот

который в конце останется только сохранить в формате xls
marku; vadyasty; ЧерныйКот; portwein; AndrewUs; +5 Ответить
25. FIGOR 11.09.18 12:28 Сейчас в теме
(74) Видимо так:

Если в запросе нельзя проверить условие в ГДЕ, то тогда
в цикле проверить поля на нужное условие

Пока РезультатЗапроса.Следующий() Цикл

если НЕ ..... тогда
продолжить;
конецесли;

Конеццикла;
portwein; AndrewUs; +2 Ответить
22. Doreng 28 11.09.18 09:54 Сейчас в теме
(21)тьфу , скобки лишние
СЧ= 2;    
    
    Пока РезультатЗапроса.Следующий() Цикл
        ТабДок.Область("R"+СЧ+"C3").Текст = РезультатЗапроса.ФИОНаименование;
        ТабДок.Область("R"+СЧ+"C7").Текст = РезультатЗапроса.ЛицевойСчет;
        ТабДок.Область("R"+СЧ+"C6").Текст = РезультатЗапроса.Сумма;
        ТабДок.Область("R"+СЧ+"C5").Текст = РезультатЗапроса.Период;
        ТабДок.Область("R"+СЧ+"C8").Текст = РезультатЗапроса.Примечание;
        ТабДок.Область("R"+СЧ+"C9").Текст = РезультатЗапроса.МестоПроведенияРабот;
        СЧ= СЧ+ 1;
    КонецЦикла
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Boneman 301 10.09.18 16:16 Сейчас в теме
(1) зачем ты вообще подключаешься к экселю, если записываешь табличный документ ?
Убирай всю эту чачу с excel.application

и кури программное заполнение табличного документа. Например вот

который в конце останется только сохранить в формате xls
marku; vadyasty; ЧерныйКот; portwein; AndrewUs; +5 Ответить
10. AndrewUs 13 11.09.18 08:13 Сейчас в теме
(2) Пробую сделать по примеру из ссылки. Создал запрос. Первое на что начало ругаться, это переменная К, потом, метод показать только на клиенте выполняется.
3. Doreng 28 10.09.18 16:28 Сейчас в теме
(1)Не городите огород...
ТабДок = Новый ТабличныйДокумент;
Тз = Новый ТаблицаЗначений;
Построитель = Новый ПостроительОтчета;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗ);
Построитель.Выполнить();
Построитель.Вывести(ТабДок);
ТабДок.Записать(ПутьКФайлу,ТипФайлаТабличногоДокумента.XLS);
Показать

// Поправил :-) (4) (5) Спасибо..
ayashchuk; portwein; +2 Ответить
4. Alexey_ 27 10.09.18 16:35 Сейчас в теме
(3)
Не городите огород...
Объект.Список.Записать(ПутьКФайлу,ТипФайлаТабличногоДокумента.XLS);

не пори горячку, у ТЧ нет метода Записать()
5. AndrewUs 13 10.09.18 16:37 Сейчас в теме
(3) Нет метода записать у ТЧ
6. AndrewUs 13 10.09.18 16:52 Сейчас в теме
(3)
ТабДок = Новый ТабличныйДокумент;
Тз = Новый ТаблицаЗначений;
Построитель = Новый ПостроительОтчета;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗ);
Построитель.Выполнить();
Построитель.Вывести(ТабДок);
ТабДок.Записать(ПутьКФайлу,ТипФайлаТабличногоДокумента.XLS);


А это все не сервере должно выполняться?
7. Boneman 301 10.09.18 16:57 Сейчас в теме
(6) таблица значений, конечно только на сервере живет.
твой задача сформировать табдок,
а уж каким способом - тебе решать.

Тут уж по ситуации смотри,
можешь на сервере сформировать и вернуть на клиента,
можешь прямо на клиенте, но другими способами.
8. accounting_cons 843 10.09.18 17:22 Сейчас в теме
Зачем вообще все это городить? Вывести ТЧ в табличный документ и сохранить его в Excel средствами платформы (файл- сохранить как...) - и все дела.
9. Doreng 28 10.09.18 17:35 Сейчас в теме
(8)
Зачем вообще все это городить?

Можно конечно и не городить и переложить эту работу на пользователя...но мне кажется, что пользователь рад не очень будет...особенно если нужно обработать сотню доков :-)
11. AndrewUs 13 11.09.18 08:15 Сейчас в теме
(8) Ситуация такая, что необходимо разделить сотрудников на разные реестры, потому что у некоторых расчетные счета в одном банке, а у некоторых в другом. Поэтому и необходимо "все это городить", чтобы упростить работу бухгалтеру с отбором и сортировкой.
12. accounting_cons 843 11.09.18 08:18 Сейчас в теме
(11) Сделать отбор в списке, вывести список с этим отбором в табличный документ. Далее сохранить этот документ как... xls файл. Или сделать простенький отчетик на СКД, результат которого опять же сохранить как...xls файл.
13. AndrewUs 13 11.09.18 08:32 Сейчас в теме
(12) Пробовал такой вариант с отбором в списке. Не получается разделить, поле ЛицевойСчет либо заполнено, либо нет, а разбить на разные банки таким образом не получится. Отчет слишком громоздко для буха в данном случае. Поэтому нужно из документа получать этот список.
14. accounting_cons 843 11.09.18 08:37 Сейчас в теме
(13)Тогда печатная форма к документу.
15. Doreng 28 11.09.18 09:04 Сейчас в теме
(13)
Не получается разделить, поле ЛицевойСчет либо заполнено

Я так понял у Вас бухгалтерия 3.0, а что за объект.список?
16. AndrewUs 13 11.09.18 09:08 Сейчас в теме
(15)Нет, база самописная на УФ.
Объект.список - это ТЧ текущего документа, табличная часть так называется ("Список").
17. AndrewUs 13 11.09.18 09:10 Сейчас в теме
С выводом в табличный документ вроде бы разобрался.
18. AndrewUs 13 11.09.18 09:10 Сейчас в теме
&НаСервере
Функция ВыгрузитьВТБНаСервере(ТабДок)
	
	ТабДок = Новый ТабличныйДокумент;
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ВедомостьПодотчетСписок.ФИО.Код КАК ФИОКод,
		|	ВедомостьПодотчетСписок.ФИО.Наименование КАК ФИОНаименование,
		|	ВедомостьПодотчетСписок.ФИО.ЛицевойСчет КАК ФИОЛицевойСчет,
		|	ВедомостьПодотчетСписок.Период КАК Период,
		|	ВедомостьПодотчетСписок.Сумма КАК Сумма,
		|	ВедомостьПодотчетСписок.ЛицевойСчет КАК ЛицевойСчет,
		|	ВедомостьПодотчетСписок.Примечание КАК Примечание,
		|	ВедомостьПодотчетСписок.МестоПроведенияРабот КАК МестоПроведенияРабот
		|ИЗ
		|	Документ.ВедомостьПодотчет.Список КАК ВедомостьПодотчетСписок
		|ГДЕ
		|	ВедомостьПодотчетСписок.Ссылка = &Ссылка";
	Запрос.УстановитьПараметр("Ссылка",Объект.Ссылка);
	РезультатЗапроса = Запрос.Выполнить().Выбрать();
	К = 1;	
	
	Пока РезультатЗапроса.Следующий() Цикл
		ТабДок.Область("R"+(К+1)+"C3").Текст = РезультатЗапроса.ФИОНаименование;
		ТабДок.Область("R"+(К+1)+"C7").Текст = РезультатЗапроса.ЛицевойСчет;
		ТабДок.Область("R"+(К+1)+"C6").Текст = РезультатЗапроса.Сумма;
		ТабДок.Область("R"+(К+1)+"C5").Текст = РезультатЗапроса.Период;
		ТабДок.Область("R"+(К+1)+"C8").Текст = РезультатЗапроса.Примечание;
		ТабДок.Область("R"+(К+1)+"C9").Текст = РезультатЗапроса.МестоПроведенияРабот;
		//K = K + 1;
	КонецЦикла;
	Рамка = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1); 
	Возврат ТабДок;
КонецФункции

&НаКлиенте
Процедура ВыгрузитьВТБ(Команда)
	
	ТабДок = Новый ТабличныйДокумент;
	ВыгрузитьВТБНаСервере(ТабДок);
	ТабДок.ОтображатьСетку = Истина;
	ТабДок.Показать();
	
КонецПроцедуры
Показать
19. AndrewUs 13 11.09.18 09:12 Сейчас в теме
Но выводит только последнюю строчку из списка, добавив строчку К = К +1, появляется ошибка "Преобразование значения к типу Число не может быть выполнено".
20. Doreng 28 11.09.18 09:36 Сейчас в теме
(19)
а "Преобразование значения к типу Число не может быть выполнено".

а так
К = 2;    
    
    Пока РезультатЗапроса.Следующий() Цикл
        ТабДок.Область("R"+(К)+"C3").Текст = РезультатЗапроса.ФИОНаименование;
        ТабДок.Область("R"+(К)+"C7").Текст = РезультатЗапроса.ЛицевойСчет;
        ТабДок.Область("R"+(К)+"C6").Текст = РезультатЗапроса.Сумма;
        ТабДок.Область("R"+(К)+"C5").Текст = РезультатЗапроса.Период;
        ТабДок.Область("R"+(К)+"C8").Текст = РезультатЗапроса.Примечание;
        ТабДок.Область("R"+(К)+"C9").Текст = РезультатЗапроса.МестоПроведенияРабот;
        K = K + 1;
    КонецЦикла;
Показать
AndrewUs; +1 Ответить
21. AndrewUs 13 11.09.18 09:42 Сейчас в теме
22. Doreng 28 11.09.18 09:54 Сейчас в теме
(21)тьфу , скобки лишние
СЧ= 2;    
    
    Пока РезультатЗапроса.Следующий() Цикл
        ТабДок.Область("R"+СЧ+"C3").Текст = РезультатЗапроса.ФИОНаименование;
        ТабДок.Область("R"+СЧ+"C7").Текст = РезультатЗапроса.ЛицевойСчет;
        ТабДок.Область("R"+СЧ+"C6").Текст = РезультатЗапроса.Сумма;
        ТабДок.Область("R"+СЧ+"C5").Текст = РезультатЗапроса.Период;
        ТабДок.Область("R"+СЧ+"C8").Текст = РезультатЗапроса.Примечание;
        ТабДок.Область("R"+СЧ+"C9").Текст = РезультатЗапроса.МестоПроведенияРабот;
        СЧ= СЧ+ 1;
    КонецЦикла
Показать
31. Greek26rusa 2 26.11.19 23:19 Сейчас в теме
(22)Добрый вечер а как теперь это все дело сохранить в эксель? после вывода выбрать место куда и сохранить
23. Doreng 28 11.09.18 09:57 Сейчас в теме
(21)Вообще такие вещи через макет лучше делать
24. AndrewUs 13 11.09.18 12:07 Сейчас в теме
Получилось. Спасибо.
А можете подсказать, есть еще одна дополнительная колонка "ЛицевойСчетДоп", у которой отключена видимость. Программно, если счет не удовлетворяет условию дублируется в эту колонку. Можно ли отобрать только те строки, в которых данное поле заполнено?
25. FIGOR 11.09.18 12:28 Сейчас в теме
(74) Видимо так:

Если в запросе нельзя проверить условие в ГДЕ, то тогда
в цикле проверить поля на нужное условие

Пока РезультатЗапроса.Следующий() Цикл

если НЕ ..... тогда
продолжить;
конецесли;

Конеццикла;
portwein; AndrewUs; +2 Ответить
26. AndrewUs 13 11.09.18 14:58 Сейчас в теме
27. AndrewUs 13 11.09.18 14:59 Сейчас в теме
Всем спасибо за помощь.
28. AndrewUs 13 11.09.18 15:43 Сейчас в теме
Еще момент, скажите, пожалуйста, как сделать сортировку как в тч, а не как хочется табличному документу?
29. user774630 11.09.18 18:39 Сейчас в теме
(28) по номеру строки ТЧ в запросе
AndrewUs; +1 Ответить
30. AndrewUs 13 12.09.18 08:48 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот