Выгрузка из табличной части документа 1С в Excel
Здравствуйте!
Пытаюсь программным способом реализовать выгрузку строк тч документа в Excel. При выгрузке файл Excel создается, но не заполняется. А при открытии вверку документа появляется сообщение: "Защищенный просмотр. Обнаружена проблема с этим файлом. Редактирование может повредить компьютер. Щелкните для получения дополнительных сведений."
Код прилагаю:
Как исправить подобную ситуацию?
Помогите, пожалуйста, с реализацией хотелки.
Спасибо.
Пытаюсь программным способом реализовать выгрузку строк тч документа в 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();
КонецПроцедуры
ПоказатьКак исправить подобную ситуацию?
Помогите, пожалуйста, с реализацией хотелки.
Спасибо.
По теме из базы знаний
- Импорт товаров из входящей ТТН. Загрузка табличной части документа из EXCEL. УТ 10.3
- Заполнение табличной части документов из файла Excel (для 1С 7.7 бухгалтерский учет, ред. 4.5)
- Загрузка данных из файла (xls, xlsx, ods) в табличную часть документа
- Доработка документа "Требование-накладная" для выгрузки табличной части в Excel
- Заполнение табличной части документа из EXCEL универсальная (толстый клиент)
Найденные решения
(21)тьфу , скобки лишние
СЧ= 2;
Пока РезультатЗапроса.Следующий() Цикл
ТабДок.Область("R"+СЧ+"C3").Текст = РезультатЗапроса.ФИОНаименование;
ТабДок.Область("R"+СЧ+"C7").Текст = РезультатЗапроса.ЛицевойСчет;
ТабДок.Область("R"+СЧ+"C6").Текст = РезультатЗапроса.Сумма;
ТабДок.Область("R"+СЧ+"C5").Текст = РезультатЗапроса.Период;
ТабДок.Область("R"+СЧ+"C8").Текст = РезультатЗапроса.Примечание;
ТабДок.Область("R"+СЧ+"C9").Текст = РезультатЗапроса.МестоПроведенияРабот;
СЧ= СЧ+ 1;
КонецЦикла
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)Не городите огород...
// Поправил :-) (4) (5) Спасибо..
ТабДок = Новый ТабличныйДокумент;
Тз = Новый ТаблицаЗначений;
Построитель = Новый ПостроительОтчета;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗ);
Построитель.Выполнить();
Построитель.Вывести(ТабДок);
ТабДок.Записать(ПутьКФайлу,ТипФайлаТабличногоДокумента.XLS);
Показать// Поправил :-) (4) (5) Спасибо..
(3)
А это все не сервере должно выполняться?
ТабДок = Новый ТабличныйДокумент;
Тз = Новый ТаблицаЗначений;
Построитель = Новый ПостроительОтчета;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗ);
Построитель.Выполнить();
Построитель.Вывести(ТабДок);
ТабДок.Записать(ПутьКФайлу,ТипФайлаТабличногоДокумента.XLS);
Тз = Новый ТаблицаЗначений;
Построитель = Новый ПостроительОтчета;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗ);
Построитель.Выполнить();
Построитель.Вывести(ТабДок);
ТабДок.Записать(ПутьКФайлу,ТипФайлаТабличногоДокумента.XLS);
А это все не сервере должно выполняться?
(12) Пробовал такой вариант с отбором в списке. Не получается разделить, поле ЛицевойСчет либо заполнено, либо нет, а разбить на разные банки таким образом не получится. Отчет слишком громоздко для буха в данном случае. Поэтому нужно из документа получать этот список.
&НаСервере
Функция ВыгрузитьВТБНаСервере(ТабДок)
ТабДок = Новый ТабличныйДокумент;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВедомостьПодотчетСписок.ФИО.Код КАК ФИОКод,
| ВедомостьПодотчетСписок.ФИО.Наименование КАК ФИОНаименование,
| ВедомостьПодотчетСписок.ФИО.ЛицевойСчет КАК ФИОЛицевойСчет,
| ВедомостьПодотчетСписок.Период КАК Период,
| ВедомостьПодотчетСписок.Сумма КАК Сумма,
| ВедомостьПодотчетСписок.ЛицевойСчет КАК ЛицевойСчет,
| ВедомостьПодотчетСписок.Примечание КАК Примечание,
| ВедомостьПодотчетСписок.МестоПроведенияРабот КАК МестоПроведенияРабот
|ИЗ
| Документ.ВедомостьПодотчет.Список КАК ВедомостьПодотчетСписок
|ГДЕ
| ВедомостьПодотчетСписок.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка",Объект.Ссылка);
РезультатЗапроса = Запрос.Выполнить().Выбрать();
К = 1;
Пока РезультатЗапроса.Следующий() Цикл
ТабДок.Область("R"+(К+1)+"C3").Текст = РезультатЗапроса.ФИОНаименование;
ТабДок.Область("R"+(К+1)+"C7").Текст = РезультатЗапроса.ЛицевойСчет;
ТабДок.Область("R"+(К+1)+"C6").Текст = РезультатЗапроса.Сумма;
ТабДок.Область("R"+(К+1)+"C5").Текст = РезультатЗапроса.Период;
ТабДок.Область("R"+(К+1)+"C8").Текст = РезультатЗапроса.Примечание;
ТабДок.Область("R"+(К+1)+"C9").Текст = РезультатЗапроса.МестоПроведенияРабот;
//K = K + 1;
КонецЦикла;
Рамка = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1);
Возврат ТабДок;
КонецФункции
&НаКлиенте
Процедура ВыгрузитьВТБ(Команда)
ТабДок = Новый ТабличныйДокумент;
ВыгрузитьВТБНаСервере(ТабДок);
ТабДок.ОтображатьСетку = Истина;
ТабДок.Показать();
КонецПроцедуры
Показать
(19)
а так
а "Преобразование значения к типу Число не может быть выполнено".
а так
К = 2;
Пока РезультатЗапроса.Следующий() Цикл
ТабДок.Область("R"+(К)+"C3").Текст = РезультатЗапроса.ФИОНаименование;
ТабДок.Область("R"+(К)+"C7").Текст = РезультатЗапроса.ЛицевойСчет;
ТабДок.Область("R"+(К)+"C6").Текст = РезультатЗапроса.Сумма;
ТабДок.Область("R"+(К)+"C5").Текст = РезультатЗапроса.Период;
ТабДок.Область("R"+(К)+"C8").Текст = РезультатЗапроса.Примечание;
ТабДок.Область("R"+(К)+"C9").Текст = РезультатЗапроса.МестоПроведенияРабот;
K = K + 1;
КонецЦикла;
Показать
(21)тьфу , скобки лишние
СЧ= 2;
Пока РезультатЗапроса.Следующий() Цикл
ТабДок.Область("R"+СЧ+"C3").Текст = РезультатЗапроса.ФИОНаименование;
ТабДок.Область("R"+СЧ+"C7").Текст = РезультатЗапроса.ЛицевойСчет;
ТабДок.Область("R"+СЧ+"C6").Текст = РезультатЗапроса.Сумма;
ТабДок.Область("R"+СЧ+"C5").Текст = РезультатЗапроса.Период;
ТабДок.Область("R"+СЧ+"C8").Текст = РезультатЗапроса.Примечание;
ТабДок.Область("R"+СЧ+"C9").Текст = РезультатЗапроса.МестоПроведенияРабот;
СЧ= СЧ+ 1;
КонецЦикла
Показать
Получилось. Спасибо.
А можете подсказать, есть еще одна дополнительная колонка "ЛицевойСчетДоп", у которой отключена видимость. Программно, если счет не удовлетворяет условию дублируется в эту колонку. Можно ли отобрать только те строки, в которых данное поле заполнено?
А можете подсказать, есть еще одна дополнительная колонка "ЛицевойСчетДоп", у которой отключена видимость. Программно, если счет не удовлетворяет условию дублируется в эту колонку. Можно ли отобрать только те строки, в которых данное поле заполнено?
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот