10.02.13 — 15:03
можно ли сохранить программно печатную форму документа в excel?
как это сделать?
1 — 10.02.13 — 15:03
Файл сохранить
2 — 10.02.13 — 15:06
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLS);
3 — 10.02.13 — 15:12
учи сп блеать
4 — 10.02.13 — 15:23
5 — 10.02.13 — 15:24
епать. стаж 7 лет…
6 — 10.02.13 — 15:29
программно создаю документ, как можно в этом созданном документе сохранить одну из его печатных форм в 1с?
7 — 10.02.13 — 15:29
(6+)все делая по коду далее, после создания документа…
8 — 10.02.13 — 15:34
вызвать функцию печати, которая вернет ТД и его сохранить
9 — 10.02.13 — 15:35
знатный холивар намечается :)))
10 — 10.02.13 — 15:35
можно получить макет ДокСчет.ПолучитьМакет(«ПФ_MXL_СчетНаОплату»), как только его счас в .xls сохранить?
11 — 10.02.13 — 15:36
а тебе его заполнить ненадо?
12 — 10.02.13 — 15:36
ДокСчет.ПолучитьМакет(«ПФ_MXL_СчетНаОплату»).Записать()
13 — 10.02.13 — 15:47
так сохранился просто макет
ДокСчет.ПолучитьМакет(«ПФ_MXL_СчетНаОплату»).Записать(«C:СчетНаОплату_» + ДокСчет.Номер + «.xls»,»xls»);
14 — 10.02.13 — 15:47
11) да нужно заполнить….., а то сохраняется с идентификаторами
15 — 10.02.13 — 15:51
а ну понял, заполнять видимо нужно программно вручную, автоматически не получится видимо…..
16 — 10.02.13 — 15:52
(15) что из (8) тебе не понятно?
17 — 10.02.13 — 15:54
(16) пробую !
18 — 10.02.13 — 16:15
конфигурация УНФ, там в меню печать свойства печати то не посмотреть, а поиском по модулу «Печа» что то совсем не дало ничего дельного, вот и незнаю что вызывать.
19 — 10.02.13 — 16:23
уже все, зови взрослых
20 — 10.02.13 — 16:31
в модуле менеджера поищи функцию печать
21 — 10.02.13 — 18:03
(20) что за модуль менеджера?
22 — 10.02.13 — 18:08
(21) даешь мне 500р, вид документа, название печатной формы. Получаешь код который отдает сформированный эксель, смотри как все просто.
23 — 10.02.13 — 18:09
и самое главное быстро, уже ведь 3 часа мучаешься
24 — 10.02.13 — 18:10
(22) да не совсем не нужно, я не мучаюсь, просто ищу решение….
25 — 10.02.13 — 18:14
Нащел процедуру в модуле команды, —
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
УправлениеПечатьюКлиент.ВыполнитьКомандуПечати(«Документ.СчетНаОплату», «СчетНаОплату», ПараметрКоманды, ПараметрыВыполненияКоманды, Неопределено);
КонецПроцедуры
26 — 10.02.13 — 18:14
(24)че его искать? Оно в (2)
27 — 10.02.13 — 18:19
(26) ну так в (13) я же записал просто макет, а нужно заполнить его данными, как говорят в (8)
28 — 10.02.13 — 18:23
(27)Все не так. Тебе надо получить печатную форму. То есть отчет у тебя должен быть. Ты спросил как сохранить, я тебе ответил в (2). Если ты спрашиваешь как сохранить, предполагается тебе есть что сохранять. Если это не так, тебе надо разобраться как получить печатную форму нужного тебе отчета. Это не сложно, но нужно сесть и разобраться. А потом применить к ней (2). В целом это достаточно просто, но время потратить придется.
29 — 10.02.13 — 18:34
(28) в (25) команда печати, которая заполняет печатную форму данными, но вот на модуль УправлениеПечатьюКлиент ругается, при вызове его из обработки (( думаю как его вызвать
30 — 10.02.13 — 18:36
установил ему вызов на сервере
31 — 10.02.13 — 19:02
Не туда смотришь
32 — 10.02.13 — 19:03
ты счет на оплату в УНФ пытаешься печатать?
33 — 10.02.13 — 19:05
34 — 10.02.13 — 19:08
хех если у человека есть макет то ему достаточно сделать(2) зачем вся эта движуха?
35 — 10.02.13 — 19:10
ТС то где?
36 — 10.02.13 — 19:14
Жесть. Делается все за 3 минуты методом (2) и перехватом ТабДок, его только там отловить, заполнять самому ничего не нужно.
Человек уже 4 часа бьется.
37 — 10.02.13 — 19:15
Да я уже ради интереса посмотрел и набросал, эти 4 строчки, недолго же, но он куда то пропал.
38 — 10.02.13 — 19:17
(37) Выкладывай, может он придет увидит.
А то мы по домам сейчас, а человеку потом ночь не спать
39 — 10.02.13 — 19:19
(21) на документе ПКМ — открыть модуль менеджера. Там и будет функция которая формирует табличный документ.
Web00001
40 — 10.02.13 — 19:24
(39)Она там есть, но она не очень удобная Удобнее использовать УправлениеПечатью.СформироватьПечатныеФормы() Она как раз формирует печатные формы.
(38)Да я как раз пока никуда не собираюсь, а вдруг ему другой документ надо или он уже сам разобрался.
1С сохранить табличный документ в pdf, xlsx, docx, txt, html файл программно
Пример процедуры
&НаСервере Процедура СохранитьВPDFНаСервере() ТабДок = Новый ТабличныйДокумент; Макет = Обработки.ТабличныйДокументСохранитьВPDF.ПолучитьМакет("Макет"); ОбластьМакета = Макет.ПолучитьОбласть("Шапка"); ТабДок.Вывести(ОбластьМакета); МестоположениеФайла = "G:ProverkaZapisiТест.pdf"; ТабДок.Записать(МестоположениеФайла , ТипФайлаТабличногоДокумента.PDF); //Запись в Excel //МестоположениеФайла = "G:ProverkaZapisiТест.XLSX"; //ТабДок.Записать(МестоположениеФайла , ТипФайлаТабличногоДокумента.XLSX); //Запись в Word //МестоположениеФайла = "G:ProverkaZapisiТест.docx"; //ТабДок.Записать(МестоположениеФайла , ТипФайлаТабличногоДокумента.DOCX); //Прочие форматы //ТипФайлаТабличногоДокумента поддерживает множество форматов //html5, mxl, txt, ods, можете поэксперементировать с различными форматами Сообщить("Файл успешно сохранен"); КонецПроцедуры
Обратите внимание, если возникла ошибка (нет доступа для записи в папку, при этом с правами у данного пользователя windows все в порядке) при выполнении строки с кодом «ТабДок.Записать ()». Выполните данную строку кода «&НаКлиенте».
Перед запуском обработки убедитесь, что на вашем компьютере существует директория «G:ProverkaZapisiТест.pdf»
Связанные статьи
Автор Gendelf, 12 ноя 2010, 09:12
0 Пользователей и 1 гость просматривают эту тему.
Нужно при нажатии на кнопку сохранить печатную форму в файл XLS, добился того чтобы форма открылась из другого документа, а что дальше незнаю…. Буду благодарен любой помощи и советам
Логика приведёт вас от А к В. Воображение доставит вас куда угодно.
Сайт про аквариум, аквариумные рыбки и аквариумные растения http://myaquainfo.ru/
ТП.Записать(«ВашеНазваниеФайла»,’XLS»);
Записать(<?>,);
Write(<?>,);
Синтаксис:
Записать(<ИмяФайла>,<ТипФайла>)
Назначение:
Записать таблицу в файл.
Параметры:
<ИмяФайла> — имя файла.
<ТипФайла> — необязательный параметр. Числовое или строковое выражение, определяющее тип файла:
· отсутствует, 0 или »MXL» — формат 1C;
· 1 или »XLS» — формат Ms Excel;
· 2 или »HTM» или »HTML» — формат HTML;
· 3 или »TXT» — формат TXT.
Замечание:
Метод может использоваться при работе с таблицей в режиме ввода данных.
* MAGAZKA — лучшая программа для розничного магазина (с) *
создаёт файл с печатным документом, но нужно каждый раз сформировать новое имя документа
Флаг=Флаг+1;
Таб.Записать("Документ"+Флаг,"XLS");
пытаюсь сделать «Документ1», «Документ2″… чтобы не затирал предыдущее сохранение. Помоги с реализацией
Логика приведёт вас от А к В. Воображение доставит вас куда угодно.
Сайт про аквариум, аквариумные рыбки и аквариумные растения http://myaquainfo.ru/
Цитата: Gendelf от 12 ноя 2010, 11:04
пытаюсь сделать «Документ1», «Документ2″… чтобы не затирал предыдущее сохранение. Помоги с реализацией
//Имена файлов: Документ+флаг
ФС.УстТекКаталог(«<строка с именем текущего каталога>»);
времИмяФайла = ИмяФайла;
нн = 1;
Пока нн = 1 Цикл
Если ФС.СуществуетФайл(времИмяФайла) = 1 Тогда
флаг = флаг+1
времИмяФайла = Сред(времИмяФайла,1,8)+флаг;
Иначе
ИмяФайла = времИмяФайла;
Прервать;
КонецЕсли;
КонецЦикла;
Цитата: DenPlus от 12 ноя 2010, 12:20
Цитата: Gendelf от 12 ноя 2010, 11:04
пытаюсь сделать «Документ1», «Документ2″… чтобы не затирал предыдущее сохранение. Помоги с реализацией//Имена файлов: Документ+флаг
ФС.УстТекКаталог(«<строка с именем текущего каталога>»);
времИмяФайла = ИмяФайла;
нн = 1;
Пока нн = 1 Цикл
Если ФС.СуществуетФайл(времИмяФайла) = 1 Тогда
флаг = флаг+1
времИмяФайла = Сред(времИмяФайла,1,8)+флаг;
Иначе
ИмяФайла = времИмяФайла;
Прервать;
КонецЕсли;
КонецЦикла;
не понял ничего)
Логика приведёт вас от А к В. Воображение доставит вас куда угодно.
Сайт про аквариум, аквариумные рыбки и аквариумные растения http://myaquainfo.ru/
разобрался немного, но всё же
Сред(времИмяФайла,1,8) — для чего?
Логика приведёт вас от А к В. Воображение доставит вас куда угодно.
Сайт про аквариум, аквариумные рыбки и аквариумные растения http://myaquainfo.ru/
Вот вы писали «Документ»+Флаг, значи это вы понимаете.
//Так вот:
ИмяФайла = «Документ»+Флаг;
//Далее по тексту:
//Имена файлов: Документ+флаг
ФС.УстТекКаталог(«<строка с именем текущего каталога>»);// установили каталог с которым будем работать
времИмяФайла = ИмяФайла; //Передали текущее имя файла во временную переменную
нн = 1;
Пока нн = 1 Цикл // Цикл прервется после того как в рабочем каталоге не будет найдено очередного файла с именем «Документ»+флаг
Если ФС.СуществуетФайл(времИмяФайла) = 1 Тогда
флаг = флаг+1//пока проверяем, что файл с таким именем существует, «накручиваем» флаг
времИмяФайла = Сред(времИмяФайла,1,8)+флаг;
Иначе
ИмяФайла = времИмяФайла;// новое имя файла получено — вылетаем из цикла
Прервать;
КонецЕсли;
КонецЦикла;
Мб что не так? но файл создаётся только один (перезаписывается) и в стартовом каталоге (вместо того чтобы создать файл в папке XLS)
ИмяФайла="Документ"+Флаг;
ФС.УстТекКаталог("C:Documents and SettingsAdminРабочий столAvtosalon_workXLS");
времИмяФайла=ИмяФайла;
нн=1;
Пока нн=1 Цикл
Если ФС.СуществуетФайл(времИмяФайла)=1 Тогда
Флаг=Флаг+1;
времИмяФайла=Сред(времИмяФайла,1,8)+Флаг;
Иначе
ИмяФайла=времИмяФайла;
Прервать;
КонецЕсли;
КонецЦикла;
Таб.Записать(ИмяФайла+Флаг,"XLS");
Логика приведёт вас от А к В. Воображение доставит вас куда угодно.
Сайт про аквариум, аквариумные рыбки и аквариумные растения http://myaquainfo.ru/
[quote author=Gendelf link=topic=5432.msg16497#msg16497 date=1289558168]
Таб.Записать(ИмяФайла+Флаг,"XLS");
[/quote]
Должно быть так:
Таб.Записать(ФС.ТекКаталог()+ИмяФайла,»XLS»);
Семерки нет под рукой. Посмотрите в отладчике что возвращает «ФС.ТекКаталог()+ИмяФайла». Допускаю, что м.б. еще «/» надо будет вставить.
Обратите внимание что по задумке записывается не «ИмяФайла+Флаг», а просто ИмяФайла. Оно уже с новой цифрой в конце.
1С 8.3 и Excel совместимы с самых первых версий платформы: любую печатную форму можно сохранить в электронную таблицу (*.xls,*.xlsx) через Меню (Еще..) -> Сохранить. Некоторые документы в типовых конфигурациях имеют встроенную функцию выгрузки в электронную таблицу. Загрузить информацию в 1С из Excel штатными средствами до последнего времени было невозможно. Только в крайних релизах 1С 8.3 была реализована возможность загрузки информации в документы закупок и продаж из excel-файла (*.xls,*.xlsx) через буфер обмена (кнопка над табличной частью «Загрузить из внешнего файла»). Однако, типовые механизмы подходят только для узкого круга задач. Для решения более широкого спектра задач по экспорту/импорту данных в/из Excel средствами 1С 8.3 создаются команды, в которых используется палитра встроенного языка.
- Для работы 1С 8.3 с Excel используется COM объект типа «Excel.Application» (через OLE, нужен установленный MS Excel) или «ADODB.Connection» (ActiveX Data Object, нужен установленный драйвера ODBC) или «COMSafeArray» (через OLE, нужен установленный драйвер ADODB).
- При загрузке из Excel в управляемом приложении можно выполнять как &НаКлиенте так и на &НаСервере. Используется временный каталог стандартного пользователя USR1CV82.
- На дисках ИТС и на портале 1С, в меню «Технологическая поддержка» -> «Универсальные отчеты и обработки» -> есть типовая обработка «Загрузка данных из табличного документа».
- У табличного документа есть метод «Прочитать». Отличная альтернатива COM объекту — актуально для файлов больших объемов.
Выбор Excel файла в 1С 8.3:
&НаКлиенте
Процедура ФайлНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) //необходимо в событии «НачалоВыбора» поля ввода вызвать ДиалогВыбораФайлаДиалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = «Выберите файл Excel»;
Диалог.ПредварительныйПросмотр = Ложь;
Диалог.Фильтр = «(*.xls,*.xlsx)|*.xls;*.xlsx;|Microsoft Excel 97/2000/XP/2003 (*.xls)|*.xls|Microsoft Excel 2007/2010 (*.xlsx)|*.xlsx»;
Если
ЗначениеЗаполнено(Объект.Файл) Тогда
Диалог.ПолноеИмяФайла= Объект.Файл;
КонецЕсли;
Если
Диалог.Выбрать() Тогда
Объект.Файл = Диалог.ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры
Загрузка из Excel файла (через COMОбъект) в 1С 8.3:
&НаСервере
Процедура ЗагрузитьИзXLS()// в документ Поступление материалов
// Попытка открытия файла Excel
Попытка
Excel_App = Новый COMОбъект(«Excel.Application»);
Excel_App.WorkBooks.Open(Объект.Файл);
Исключение
Сообщить(«Произошла ошибка при открытии файла «+СокрЛП(ОписаниеОшибки())+«! Операция прервана!»);
Возврат;
КонецПопытки;// Попытка выбрать первый лист (можно указать другой)
Попытка
Excel_App.Sheets(1).Select();
Исключение
// Если первый лист не найден — закрываем файл
Excel_App.ActiveWorkbook.Close();
Excel_App = 0;
Сообщить(«Первый лист не найден!»);
ОтменитьТранзакцию();
Возврат;
КонецПопытки;// Вычисление количества строк и колонок в зависимости от версии Excel
version_Ex = Лев(Excel_App.Version, Найти(Excel_App.Version,«.»)-1);
Если version_Ex = «8» тогда
Колич_Строк = Excel_App.Cells.CurrentRegion.Rows.Count;
Колич_Колонок = Макс(Excel_App.Cells.CurrentRegion.Columns.Count, 13);
Иначе
Колич_Строк = Excel_App.Cells(1,1).SpecialCells(11).Row;
Колич_Колонок = Excel_App.Cells(1,1).SpecialCells(11).Column;
Конецесли;// Имена колонок в файле должны совпадать с именами реквизитов табличной части, в которую загружаются данные
// Переменная ТЗ_Колонки содержит список номеров колонок, которые будут перегружаться
ТЗ_Колонки = Новый ТаблицаЗначений;
ТЗ_Колонки.Колонки.Добавить(«НомерКолонки»);
ТЗ_Колонки.Колонки.Добавить(«НазваниеКолонки»);
Для
Каждая_Колонка = 1 по Колич_Колонок ЦиклИмяКолонки = Excel_App.Cells(1, Каждая_Колонка).Text;
ИмяБезПробелов = СтрЗаменить(ИмяКолонки,» «,«»); // Удаление лишних пробелов из имен колонок
// Проверка наличия реквизитов табличной части «Материалы» в документе «ПоступлениеМатериалов»
Если НЕ ПроверкаРеквизитаТЧ(ИмяБезПробелов, Метаданные.Документы.ПоступлениеМатериалов, «Материалы») Тогда
Сообщить(«Не найден реквизит с именем » + ИмяБезПробелов + «! Колонка не будет загружена!»);
Иначе
Новая_Строка = ТЗ_Колонки.Добавить();
Новая_Строка.НомерКолонки = Каждая_Колонка;
Новая_Строка.НазваниеКолонки = ИмяБезПробелов;
КонецЕсли;
КонецЦикла;
// Если есть колонки для загрузки и есть колонка «Материалы» (обязательная к заполнению)
Если ТЗ_Колонки.Количество() <> 0 и
ТЗ_Колонки.НайтиСтроки(Новый Структура(«НазваниеКолонки», «Материалы»)).Количество() <> 0 Тогда// Создание документа и заполнение реквизитов шапки
Тек_Документ = Документы.ПоступлениеМатериалов.СоздатьДокумент();
Тек_Документ.Комментарий = «Загружено из файла » + Объект.Файл;
Тек_Документ.Дата = ТекущаяДата();
Тек_Документ.Ответственный = ПараметрыСеанса.ТекущийПользователь;
Для
Тек_Строка = 1 по Колич_Строк Цикл // Заполнение табличной части «Материалы»Строка_Док = Тек_Документ.Материалы.Добавить();
Строка_Док.Валюта = Тек_Документ.ТипЦен.ВалютаЦены;
Для каждого
Тек_ТЗ из ТЗ_Колонки ЦиклТек_Значение = Excel_App.Cells(Тек_Строка, Тек_ТЗ.НомерКолонки).Text;// Получение имени колонки
ИмяКолонкиДокумента = Excel_App.Cells(1, Тек_ТЗ.НомерКолонки).Text;// Заполнение строки данными
Если ИмяКолонкиДокумента = «Материалы» Тогда
Строка_Док.Номенклатура = Справочники.Материалы.НайтиПоНаименованию(Тек_Значение, Истина);
ИначеЕсли ИмяКолонкиДокумента = «Цена» Тогда
Строка_Док.Цена = Тек_Значение;
ИначеЕсли ИмяКолонкиДокумента = «Ставка_НДС» Тогда
Строка_Док.Ставка_НДС = Тек_Значение;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Тек_Документ.Записать(РежимЗаписиДокумента.Проведение); // Запись и проведение документа
Сообщить(«Записан документ » + СокрЛП(Тек_Документ));
Иначе
Сообщить(«В файле «+СокрЛП(Объект.Файл)+» не достаточно данных для заполнения документа!»);
КонецЕсли;Excel_App.DisplayAlerts = 0;
Excel_App.Quit();
Excel_App.DisplayAlerts = 1;
КонецПроцедуры
&НаСервере
Функция ПроверкаРеквизитаТЧ(ИмяРекв, МетаданныеДок, ИмяТЧ)// Проверка наличия ТЧ
ТаблЧасть = МетаданныеДок.ТабличныеЧасти.Найти(ИмяТЧ);
Если ТаблЧасть = Неопределено Тогда // Нет такой таб. части в документе
Возврат Ложь; //реквизит не найден
Иначе
Возврат НЕ (ТаблЧасть.Реквизиты.Найти(ИмяРекв) = Неопределено);//реквизит найден
КонецЕсли;
КонецФункции
Выгрузка в Excel файл (через COMОбъект) в 1С 8.3:
&НаСервере
Процедура ВыгрузитьВXLS(Выб_Таблица)
Если
Выб_Таблица.Количество() = 0 Тогда
Сообщить(«Пустая таблица! Операция прервана!»);
Возврат;
КонецЕсли;
Попытка
Excel_App = Новый COMОбъект(«Excel.Application»); // Подключение к Excel
Исключение
Сообщить(«Произошла ошибка при открытии файла «+СокрЛП(ОписаниеОшибки())+«! Операция прервана!»);
Возврат;
КонецПопытки;
Попытка
Book_Excel = Excel_App.WorkBooks.Add();Sheet_Excel = Book_Excel.WorkSheets(1);
Sheet_Excel.Name = «Test Sheet»; // Присваиваем имя первому листуExcel_App.ActiveWindow.View = 2; // Режим страничного просмотра
Excel_App.ActiveWindow.Zoom = 100; // Масштаб
Sheet_Excel.PageSetup.Orientation = 2; // Альбомная ориентация
Sheet_Excel.Columns(1).ColumnWidth = 20; // Ширина первой колонки
Sheet_Excel.Columns(2).ColumnWidth = 40; // Ширина второй колонки
Sheet_Excel.Columns(10).ColumnWidth = 15;
Sheet_Excel.Columns(11).ColumnWidth = 15;Sheet_Excel.Cells(1, 1).Value = «№ ПП»; //Создаем шапку 1
Sheet_Excel.Cells(1, 2).Value = «Текст»;
Sheet_Excel.Cells(1, 3).Value = «Числа»;
Sheet_Excel.Cells(1, 10).Value = «Дата»;
Sheet_Excel.Cells(1, 11).Value = «Формула»;Sheet_Excel.Cells(2, 3).Value = «Число 1»;//Создаем шапку 2
Sheet_Excel.Cells(2, 4).Value = «Число 2»;
Sheet_Excel.Cells(2, 5).Value = «Число 3»;
Sheet_Excel.Cells(2, 6).Value = «Число 4»;
Sheet_Excel.Cells(2, 7).Value = «Число 5»;
Sheet_Excel.Cells(2, 8).Value = «Число 6»;
Sheet_Excel.Cells(2, 9).Value = «Число 7»;Sheet_Excel.Range(«A1:A2»).MergeCells = Истина; Sheet_Excel.Range(«A1:A2»).WrapText = Истина;
Sheet_Excel.Range(«B1:B2»).MergeCells = Истина; Sheet_Excel.Range(«B1:B2»).WrapText = Истина;
Sheet_Excel.Range(«J1:J2»).MergeCells = Истина; Sheet_Excel.Range(«J1:J2»).WrapText = Истина;
Sheet_Excel.Range(«K1:K2»).MergeCells = Истина; Sheet_Excel.Range(«K1:K2»).WrapText = Истина;
Sheet_Excel.Range(«C1:I1»).MergeCells = Истина; Sheet_Excel.Range(«C1:I1»).WrapText = Истина;Sheet_Excel.Range(«A1:K2»).Borders.Linestyle = 1; //Линия границы
Sheet_Excel.Range(«A1:K2»).HorizontalAlignment = 3; //Выравнивание по горизонтали
Sheet_Excel.Range(«A1:K2»).VerticalAlignment = 2; //Выравнивание по вертикали
Sheet_Excel.Range(«A1:K2»).Font.Bold = 1; //Установим жирный шрифт в шапке
// Выгружаем данные в таблицу
Количество_Строк = 3; //Заполнение ТЧ начинаем с третьей строки
Для Каждого ТекСтрока Из Выб_Таблица Цикл
Sheet_Excel.Cells(Количество_Строк, 1).Value = ТекСтрока.НомерПоПорядку;
Sheet_Excel.Cells(Количество_Строк, 2).Value = ТекСтрока.Табл_Текст;
Sheet_Excel.Cells(Количество_Строк, 3).Value = ТекСтрока.Табл_Число1;
Sheet_Excel.Cells(Количество_Строк, 4).Value = ТекСтрока.Табл_Число2;
Sheet_Excel.Cells(Количество_Строк, 5).Value = ТекСтрока.Табл_Число3;
Sheet_Excel.Cells(Количество_Строк, 6).Value = ТекСтрока.Табл_Число4;
Sheet_Excel.Cells(Количество_Строк, 7).Value = ТекСтрока.Табл_Число5;
Sheet_Excel.Cells(Количество_Строк, 8).Value = ТекСтрока.Табл_Число6;
Sheet_Excel.Cells(Количество_Строк, 9).Value = ТекСтрока.Табл_Число7;
Sheet_Excel.Cells(Количество_Строк, 10).Value = ТекСтрока.Табл_Дата;
Sheet_Excel.Cells(Количество_Строк, 11).Formula = «=F» + Строка(Количество_Строк)
+ «+G» + Строка(Количество_Строк);Количество_Строк = Количество_Строк + 1;
КонецЦикла;Количество_Строк = Количество_Строк — 1; //Последняя строка для форматированияSheet_Excel.Range(«A3:K» + Строка(Количество_Строк)).Borders.Linestyle = 1; //Линия границы
Sheet_Excel.Range(«A3:K» + Строка(Количество_Строк)).VerticalAlignment = 2; //Выравнивание по вертикалиДля НомерСтроки = 3 По Количество_Строк Цикл // Установка числового формата
Для Столбец = 4 По 9 Цикл
Sheet_Excel.Cells(НомерСтроки, Столбец).NumberFormat = «0.00»;
КонецЦикла;
Sheet_Excel.Cells(НомерСтроки, 11).NumberFormat = «0.00»;
КонецЦикла;
Исключение
Excel_App.Quit();
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
Попытка
Book_Excel.SaveAs(Объект.Файл);
Сообщить(«Файл » + Объект.Файл + » успешно сохранен»);
Исключение
Сообщить(ОписаниеОшибки() + » Файл не сохранен!»);
Возврат;
КонецПопытки;
Попытка
Excel_App.Quit();
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
КонецПроцедуры
Справочно: Основные свойства и методы для работы с Excel через OLE в 1С 8.3:
Действия с приложением:
- Установка видимости окна приложения …… Excel_App.Visible = Ложь;
- Установка режима вывода предупреждений (выводить/не выводить) …… Excel_App.DisplayAlerts = Ложь;
- Закрытие приложения …… Excel_App.Quit();
Действия с книгой:
- Создание новой книги …… Book_Excel = Excel_App.WorkBooks.Add();
- Открытие существующей книги …… Book_Excel = Excel_App.WorkBooks.Open(ИмяФайла);
- Сохранение книги …… Book_Excel.SaveAs(ИмяФайла);
- Закрытие книги …… Book_Excel .Close(0);
Действия с листом:
- Установка текущего листа …… Sheet_Excel = Book_Excel.WorkSheets(НомерSheet_Excelа);
- Установка имени …… Sheet_Excel.Name = Имя;
- Установка защиты …… Sheet_Excel.Protect();
- Снятие защиты …… Sheet_Excel.UnProtect();
- Установка ориентации страницы …… Sheet_Excel.PageSetup.Orientation = 2; 1 — книжная, 2 — альбомная
- Установка левой границы …… Sheet_Excel.PageSetup.LeftMargin = Excel_App.CentimetersToPoints(Сантиметры);
- Установка верхней границы …… Sheet_Excel.PageSetup.TopMargin = Excel_App.CentimetersToPoints(Сантиметры);
- Установка правой границы …… Sheet_Excel.PageSetup.RightMargin = Excel_App.CentimetersToPoints(Сантиметры);
- Установка нижней границы …… Sheet_Excel.PageSetup.BottomMargin = Excel_App.CentimetersToPoints(Сантиметры);
Действия со строками, колонками, ячейками:
- Установка ширины колонки …… Sheet_Excel.Columns(НомерКолонки).ColumnWidth = Ширина;
- Удаление строки …… Sheet_Excel.Rows(НомерСтроки).Delete();
- Удаление колонки …… Sheet_Excel.Columns(НомерКолонки).Delete();
- Удаление ячейки …… Sheet_Excel.Cells(НомерСтроки, НомерКолонки).Delete();
- Установка значения …… Sheet_Excel.Cells(НомерСтроки, НомерКолонки).Value = Значение;
- Объединение ячеек …… Sheet_Excel.Range(Sheet_Excel.Cells(НомерСтроки, НомерКолонки),
Sheet_Excel.Cells(НомерСтроки1, НомерКолонки1)).Merge();
- Установка шрифта …… Sheet_Excel.Cells(НомерСтроки, НомерКолонки).Font.Name = ИмяШрифта;
- Установка размера шрифта …… Sheet_Excel.Cells(НомерСтроки, НомерКолонки).Font.Size = РазмерШрифта;
- Установка жирного шрифта …… Sheet_Excel.Cells(НомерСтроки, НомерКолонки).Font.Bold = 1; 1 — жирный шрифт, 0 — нормальный
- Установка курсива …… Sheet_Excel.Cells(НомерСтроки, НомерКолонки).Font.Italic = 1; 1 — курсив, 0 — нормальный
- Установка подчеркнутого шрифта …… Sheet_Excel.Cells(НомерСтроки, НомерКолонки).Font.Underline = 2; 2 — подчеркнутый, 1 — нет
Загрузка из Excel файла (через ADODB.Connection) в 1С 8.3:
&НаСервере
Процедура ЗагрузитьИзXLS_ADODB()// Создание COM-объекта для соединения
ADODB_conn = Новый COMОбъект(«ADODB.Connection»);// Установка строки соединения
ADODB_conn.ConnectionString = «Provider=Microsoft.ACE.OLEDB.12.0;
|Data Source=»+ИмяФайла+«;
|Extended Properties=»»Excel 12.0 XML;HDR=YES»»;»;
ADODB_conn.Open(); // Открытие соединения
// Создание COM-объекта для получения выборки
ADODB_rec = Новый COMОбъект(«ADODB.Recordset»);
ТекстЗапроса = «SELECT * FROM [ЛистN1$]»;// Выборка (запрос)
ADODB_rec.Open(ТекстЗапроса, ADODB_conn);// Обход результата выборки
Пока НЕ ADODB_rec.EOF() Цикл
ЗначениеКолонки1 = ADODB_rec.Fields.Item(«КолонкаN1»).Value; // Обращение по имени колонки
ЗначениеКолонки2 = ADODB_rec.Fields.Item(0).Value; // Обращение по индексу колонки
ADODB_rec.MoveNext();
КонецЦикла;ADODB_rec.Close();
ADODB_rec = Неопределено;
ADODB_conn.Close();
ADODB_conn = Неопределено;
КонецПроцедуры
Выгрузка в Excel файла (через ADODB.Connection) в 1С 8.3:
&НаСервере
Процедура ВыгрузитьВXLS_ADODB()// Создание COM-объекта для соединения
ADODB_conn = Новый COMОбъект(«ADODB.Connection»);// Установка строки соединения
ADODB_conn.ConnectionString = «Provider=Microsoft.ACE.OLEDB.12.0;
|Data Source=»+ИмяФайла+«;
|Extended Properties=»»Excel 12.0 XML;HDR=YES»»;»;
ADODB_conn.Open(); // Открытие соединения
// Создание COM-объекта для команды
ADODB_com = Новый COMОбъект(«ADODB.Command»);
ADODB_com.ActiveConnection = ADODB_conn;// Присвоение текста команды для создания таблицы
ADODB_com.CommandText = «CREATE TABLE [ЛистN1] (КолонкаN1 char(255), КолонкаN2 date, КолонкаN3 int, КолонкаN4 float)»;
ADODB_com.Execute(); // Выполнение команды
// Присвоение текста команды для добавления строки таблицы
ADODB_com.CommandText = «INSERT INTO [ЛистN1] (КолонкаN1, КолонкаN2, КолонкаN3, КолонкаN4) values (‘абвгдеё’, ‘8/11/2017’, ‘12345’, ‘12345,6789’)»;
ADODB_com.Execute(); // Выполнение команды
// Удаление команды и закрытие соединения
ADODB_com = Неопределено;
ADODB_conn.Close();
ADODB_conn = Неопределено;
КонецПроцедуры
Создание нового листа Excel со структурой (через ADODB.Connection) в 1С 8.3:
&НаСервере
Процедура СозданиеНовогоЛистаВXLS_ADODB()// Создание COM-объекта для работы с книгой
Book_Excel = Новый COMОбъект(«ADOX.Catalog»);
Book_Excel.ActiveConnection = Соединение;// Создание COM-объекта для работы со структурой данных на листе
Excel_App = Новый COMОбъект(«ADOX.Table»);
Excel_App.Name = «ЛистN1»;
Excel_App.Columns.Append(«КолонкаN1», 202);
Excel_App.Columns.Append(«КолонкаN2», 7);
Excel_App.Columns.Append(«КолонкаN3», 5);
// Тип колонки (необязательный параметр):
// 5 — adDouble;
// 6 — adCurrency;
// 7 — adDate;
// 11 — adBoolean;
// 202 — adVarWChar;
// 203 — adLongVarWChar.
// Создание в книге листа с описанной структурой
Book_Excel.Tables.Append(Excel_App);
Excel_App = Неопределено;
Book_Excel = Неопределено;
КонецПроцедуры
Справочно: Объекты ADO для работы с Excel в 1С 8.3:
- Connection
- Command
- Errors
- Fields
- Parameters
- Properties
- Recordset
- Record
- Stream
В строке соединения параметр HDR определяет как будет восприниматься первая строка на листе.
NO — первая строка воспринимается как данные. К значениям можно обращаться только по индексу колонки.
YES — первая строка воспринимается как названия колонок. К значениям можно обращаться по имени и по индексу колонки.
Выгрузка в Excel файл (через COMSafeArray) в 1С 8.3:
&НаСервере
Процедура ВыгрузитьВXLS_COMSafeArray(Выб_Таблица)
Если
Выб_Таблица.Количество() = 0 Тогда
Сообщить(«Пустая таблица! Операция прервана!»);
Возврат;
КонецЕсли;
Если НЕ
ЗначениеЗаполнено(Объект.Файл) Тогда
Сообщить(«Выберите файл! Операция прервана!»);
Возврат;
КонецЕсли;
Попытка
Excel_App = Новый COMОбъект(«Excel.Application»);
Excel_App.Interactive = Ложь;
Excel_App.DisplayAlerts = Ложь;
Исключение
Сообщить(«Не удалось подключиться к Excel, возможно программа на компьютере не установлена! Операция прервана!»);
Возврат;
КонецПопытки;КолонкиТаблицы = Выб_Таблица.Колонки;СтартМассив = Новый Массив;
Для каждого Колонка Из КолонкиТаблицы Цикл
СтартМассив.Добавить(Выб_Таблица.ВыгрузитьКолонку(Колонка.Имя));
КонецЦикла;РазмерМассив = Новый Массив;
РазмерМассив.Добавить(КолонкиТаблицы.Количество());
РазмерМассив.Добавить(Выб_Таблица.Количество());МассивArray = Новый COMSafeArray(СтартМассив, «VT_VARIANT», РазмерМассив);НачальнаяСтрока = 2;Book_Excel = Excel_App.Workbooks.Add();
Sheet_Excel = Book_Excel.Sheets(1);
Кол_Строк = Выб_Таблица.Количество()+1;
Кол_Колонок = КолонкиТаблицы.Количество();
Sheet_Excel.Range(Sheet_Excel.Cells(2,1), Sheet_Excel.Cells(Кол_Строк, Кол_Колонок)).Value = МассивArray;
a=0;
Для каждого Колонка Из КолонкиТаблицы Цикл
a=a+1;
Sheet_Excel.Cells(1,a).Value = Колонка.Имя;
Sheet_Excel.Columns(a).EntireColumn.AutoFit();
КонецЦикла;
Попытка
Book_Excel.SaveAs(Объект.Файл);
Исключение
Book_Excel.Close();
Book_Excel = Неопределено;
Сообщить(«Ошибка при записи файла! Операция прервана!»);
Возврат;
КонецПопытки;Excel_App.Interactive = Истина;
Excel_App.DisplayAlerts = Истина;
Excel_App.Application.Quit();
Excel_App = Неопределено;
КонецПроцедуры
Загрузка из Excel файла (напрямую через табличный документ) в 1С 8.3:
&НаСервере
Процедура ЗагрузитьИзXLSНапрямую()// Начиная с версии 1С 8.3.8 (только &НаСервере)ТабличныйДокумент.Прочитать(Объект.Файл, СпособЧтенияЗначенийТабличногоДокумента.Значение); //Способ чтения: Значение, ТекстКонецПроцедуры
Выгрузка в Excel файл (напрямую через табличный документ) в 1С 8.3:
&НаСервере
Процедура ВыгрузитьВXLSНапрямую()// Начиная с версии 1С 8.3.8 (можно и &НаКлиенте и на &НаСервере)ТабличныйДокумент.Записать(Объект.Файл, ТипФайлаТабличногоДокумента.XLSX); //Тип файла: XLS95, XLS97, XLSXКонецПроцедуры
💡 Готовые модели кода (шаблоны) с «Excel» 1С:
Copyright©, «Программист 1С в г.Минске», 13.09.2020
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
+4
Процедура сохраняет табличный документ в файл excel и открывает его
Код 1C v 8.х
Процедура ОткрытьТабличныйДокументВExcel(ТабДокумент,ИмяФайла) Экспорт
ИмяФайла = Строка(ИмяФайла) + ".xls";
Каталог = КаталогВременныхФайлов();
ПолныйПутьКФайлу = Каталог + ИмяФайла;
Попытка
ТабДокумент.Записать(ПолныйПутьКФайлу,ТипФайлаТабличногоДокумента.XLS);
Сообщить("Записан новый файл " + ПолныйПутьКФайлу);
ЗапуститьПриложение(ПолныйПутьКФайлу);
Исключение
СообщитьОбОшибке(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры