1с сохранение печатной формы в excel программно

   LivingStar

10.02.13 — 15:03

можно ли сохранить программно печатную форму документа в excel?

как это сделать?

   Aleksey

1 — 10.02.13 — 15:03

Файл сохранить

   Web00001

2 — 10.02.13 — 15:06

ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLS);

   kotletka

3 — 10.02.13 — 15:12

учи сп блеать

   NDN

4 — 10.02.13 — 15:23

   Нуф-Нуф

5 — 10.02.13 — 15:24

епать. стаж 7 лет…

   LivingStar

6 — 10.02.13 — 15:29

программно создаю документ, как можно в этом созданном документе сохранить одну из его печатных форм в 1с?

   LivingStar

7 — 10.02.13 — 15:29

(6+)все делая по коду далее, после создания документа…

   DrShad

8 — 10.02.13 — 15:34

вызвать функцию печати, которая вернет ТД и его сохранить

   DrShad

9 — 10.02.13 — 15:35

знатный холивар намечается :)))

   LivingStar

10 — 10.02.13 — 15:35

можно получить макет ДокСчет.ПолучитьМакет(«ПФ_MXL_СчетНаОплату»), как только его счас в .xls сохранить?

   kotletka

11 — 10.02.13 — 15:36

а тебе его заполнить ненадо?

   DrShad

12 — 10.02.13 — 15:36

ДокСчет.ПолучитьМакет(«ПФ_MXL_СчетНаОплату»).Записать()

   LivingStar

13 — 10.02.13 — 15:47

так сохранился просто макет

ДокСчет.ПолучитьМакет(«ПФ_MXL_СчетНаОплату»).Записать(«C:СчетНаОплату_» + ДокСчет.Номер + «.xls»,»xls»);

   LivingStar

14 — 10.02.13 — 15:47

11) да нужно заполнить….., а то сохраняется с идентификаторами

   LivingStar

15 — 10.02.13 — 15:51

а ну понял, заполнять видимо нужно программно вручную, автоматически не получится видимо…..

   DrShad

16 — 10.02.13 — 15:52

(15) что из (8) тебе не понятно?

   LivingStar

17 — 10.02.13 — 15:54

(16) пробую !

   LivingStar

18 — 10.02.13 — 16:15

конфигурация УНФ, там в меню печать свойства печати то не посмотреть, а поиском по модулу «Печа» что то совсем не дало ничего дельного, вот и незнаю что вызывать.

   Живой Ископаемый

19 — 10.02.13 — 16:23

уже все, зови взрослых

   zmaximka

20 — 10.02.13 — 16:31

в модуле менеджера поищи функцию печать

   LivingStar

21 — 10.02.13 — 18:03

(20) что за модуль менеджера?

   Web00001

22 — 10.02.13 — 18:08

(21) даешь мне 500р, вид документа, название печатной формы. Получаешь код который отдает сформированный эксель, смотри как все просто.

   Web00001

23 — 10.02.13 — 18:09

и самое главное быстро, уже ведь 3 часа мучаешься

   LivingStar

24 — 10.02.13 — 18:10

(22) да не совсем не нужно, я не мучаюсь, просто ищу решение….

   LivingStar

25 — 10.02.13 — 18:14

Нащел процедуру в модуле команды, —

&НаКлиенте

Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

   
   УправлениеПечатьюКлиент.ВыполнитьКомандуПечати(«Документ.СчетНаОплату», «СчетНаОплату», ПараметрКоманды, ПараметрыВыполненияКоманды, Неопределено);

   
КонецПроцедуры

   Web00001

26 — 10.02.13 — 18:14

(24)че его искать? Оно в (2)

   LivingStar

27 — 10.02.13 — 18:19

(26) ну так в (13) я же записал просто макет, а нужно заполнить его данными, как говорят в (8)

   Web00001

28 — 10.02.13 — 18:23

(27)Все не так. Тебе надо получить печатную форму. То есть отчет у тебя должен быть. Ты спросил как сохранить, я тебе ответил в (2). Если ты спрашиваешь как сохранить, предполагается тебе есть что сохранять. Если это не так, тебе надо разобраться как получить печатную форму нужного тебе отчета. Это не сложно, но нужно сесть и разобраться. А потом применить к ней (2). В целом это достаточно просто, но время потратить придется.

   LivingStar

29 — 10.02.13 — 18:34

(28) в (25) команда печати, которая заполняет печатную форму данными, но вот на модуль УправлениеПечатьюКлиент ругается, при вызове его из обработки (( думаю как его вызвать

   LivingStar

30 — 10.02.13 — 18:36

установил ему вызов на сервере

   Web00001

31 — 10.02.13 — 19:02

Не туда смотришь

   Web00001

32 — 10.02.13 — 19:03

ты счет на оплату в УНФ пытаешься печатать?

   GANR

33 — 10.02.13 — 19:05

   Web00001

34 — 10.02.13 — 19:08

хех если у человека есть макет то ему достаточно сделать(2) зачем вся эта движуха?

   Web00001

35 — 10.02.13 — 19:10

ТС то где?

   Повелитель

36 — 10.02.13 — 19:14

Жесть. Делается все за 3 минуты методом (2) и перехватом ТабДок, его только там отловить, заполнять самому ничего не нужно.

Человек уже 4 часа бьется.

   Web00001

37 — 10.02.13 — 19:15

Да я уже ради интереса посмотрел и набросал, эти 4 строчки, недолго же, но он куда то пропал.

   Повелитель

38 — 10.02.13 — 19:17

(37) Выкладывай, может он придет увидит.

А то мы по домам сейчас, а человеку потом ночь не спать :)

   zmaximka

39 — 10.02.13 — 19:19

(21) на документе ПКМ — открыть модуль менеджера. Там и будет функция которая формирует табличный документ.

  

Web00001

40 — 10.02.13 — 19:24

(39)Она там есть, но она не очень удобная :) Удобнее использовать УправлениеПечатью.СформироватьПечатныеФормы() Она как раз формирует печатные формы.

(38)Да я как раз пока никуда не собираюсь, а вдруг ему другой документ надо или он уже сам разобрался.

Skip to content

1С сохранить табличный документ в pdf, xlsx, docx, txt, html файл программно

Сохранить табличный документ в 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, добился того чтобы форма открылась из другого документа, а что дальше незнаю…. Буду благодарен любой помощи и советам  :mellow:

Логика приведёт вас от А к В. Воображение доставит вас куда угодно.
Сайт про аквариум, аквариумные рыбки и аквариумные растения http://myaquainfo.ru/


ТП.Записать(«ВашеНазваниеФайла»,’XLS»);

Записать(<?>,);
Write(<?>,);
Синтаксис:
Записать(<ИмяФайла>,<ТипФайла>)
Назначение:
Записать таблицу в файл.
Параметры:
<ИмяФайла> — имя файла.
<ТипФайла> — необязательный параметр. Числовое или строковое выражение, определяющее тип файла:
· отсутствует, 0 или »MXL» — формат 1C;
· 1 или »XLS» — формат Ms Excel;
· 2 или »HTM» или »HTML» — формат HTML;
· 3 или »TXT» — формат TXT.
Замечание:
Метод может использоваться при работе с таблицей в режиме ввода данных.


*  MAGAZKA — лучшая программа для розничного магазина (с) *


создаёт файл с печатным документом, но нужно каждый раз сформировать новое имя документа


Флаг=Флаг+1;
Таб.Записать("Документ"+Флаг,"XLS");

пытаюсь сделать «Документ1», «Документ2″… чтобы не затирал предыдущее сохранение. Помоги с реализацией  :nhsrm:

Логика приведёт вас от А к В. Воображение доставит вас куда угодно.
Сайт про аквариум, аквариумные рыбки и аквариумные растения http://myaquainfo.ru/


Цитата: Gendelf от 12 ноя 2010, 11:04
пытаюсь сделать «Документ1», «Документ2″… чтобы не затирал предыдущее сохранение. Помоги с реализацией  :nhsrm:

//Имена файлов: Документ+флаг
   ФС.УстТекКаталог(«<строка с именем текущего каталога>»);
   времИмяФайла = ИмяФайла;                       
   нн = 1;
   Пока нн = 1 Цикл
    Если ФС.СуществуетФайл(времИмяФайла) = 1 Тогда
      флаг = флаг+1
      времИмяФайла = Сред(времИмяФайла,1,8)+флаг;
    Иначе
      ИмяФайла = времИмяФайла;
      Прервать;
    КонецЕсли;
   КонецЦикла;   


Цитата: DenPlus от 12 ноя 2010, 12:20

Цитата: Gendelf от 12 ноя 2010, 11:04
пытаюсь сделать «Документ1», «Документ2″… чтобы не затирал предыдущее сохранение. Помоги с реализацией  :nhsrm:

//Имена файлов: Документ+флаг
   ФС.УстТекКаталог(«<строка с именем текущего каталога>»);
   времИмяФайла = ИмяФайла;                       
   нн = 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);
Сообщить("Записан новый файл " + ПолныйПутьКФайлу);
ЗапуститьПриложение(ПолныйПутьКФайлу);
Исключение
СообщитьОбОшибке(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры

Понравилась статья? Поделить с друзьями:
  • 1с свойство excel application
  • 1с работа с word без com
  • 1с документооборот шаблон word
  • 1с работа с word com объектом
  • 1с документ word в макет 1с