Результат скд в excel

   programmistochka

04.08.10 — 17:32

I need help, товарисчи… Задача такая — получить список номенклатуры с ценой и выгрузить в эксель — для передачи файла покупателю. Покупатель в свою очередь проставляет в экселевском файле количество товара, а сумма должна автоматически посчитаться — т.е. ячейка Сумма должна содержать формулу (= введенное количество*цену товара).

Как 1с экспортирует отчет в Эксель, полученный с помощью СКД — устраивает, дабы чтоб упростить себе работу и не выгружать «ручками» весь отчет я заполняю колонку «СУММА» в СКД формулой, полученной из VB (ActiveCell.FormulaR1C1 = «=RC[-2]*RC[-1]»). Пример запроса для СКД:

ВЫБРАТЬ

   спрНоменклатура.Родитель КАК Группа,

   спрНоменклатура.Артикул КАК Артикул,

   спрНоменклатура.Ссылка КАК Номенклатура,

   0 КАК ЗаказШт,

   ЦеныНоменклатурыСрезПоследних.Цена КАК БазоваяЦенаРуб,

   «=RC[-2]*RC[-1]» КАК Сумма

ИЗ

   Справочник.Номенклатура КАК спрНоменклатура

       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних

       ПО спрНоменклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура.Ссылка

           И (ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦены)

ГДЕ

   спрНоменклатура.ПометкаУдаления = ЛОЖЬ

   И спрНоменклатура.ЭтоГруппа = ЛОЖЬ

Результат: формула передается как символы, но если в ячейке сумма нажать энтр))) — то считает %))))

Есть ли нормальный способ передать формулу?

   Лефмихалыч

1 — 04.08.10 — 17:37

во-первых, на кой куй вам скд?

   Новенький_2009

2 — 04.08.10 — 17:46

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

   Новенький_2009

3 — 04.08.10 — 17:48

2 варианта:

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

2. писать напрямую по кому в ексель и там уже форматировать колонки как тебе нужно.

   Zeldan

4 — 04.08.10 — 18:40

без фотки не взлетит..

   programmistochka

5 — 05.08.10 — 09:21

СКД — красивый отчет делает — цветастенький)) все как бухгалтерия хочет

   programmistochka

6 — 05.08.10 — 09:23

Спасибо, меня тоже мой вариант смущает

   Cube

7 — 05.08.10 — 09:32

(4) +1 А фотки в профиле-то нет… :)

   programmistochka

8 — 05.08.10 — 14:40

нет))) а зачем?

   Zeldan

9 — 05.08.10 — 14:58

(8)без фотки не помогут…

   programmistochka

10 — 05.08.10 — 15:05

мужики блин, программисты)))

   GedKo

11 — 05.08.10 — 15:05

(8) это аналог бус у местных папуасов

   programmistochka

12 — 05.08.10 — 15:21

а как ПРОГРАММНО вызвать: меню 1с — Файл — сохранить копию (формат *.xls)?:-[

   programmistochka

13 — 05.08.10 — 15:22

это для того, чтоб обработать сохраненный средствами 1С файл эксель

   Лефмихалыч

14 — 05.08.10 — 15:26

(12) ДиалогВыбораФайла

   mythos

15 — 05.08.10 — 15:27

Метод Записать у табличного документа в который выводится отчет, это чтобы в эксель сохранить.

ТабличныйДокумент (SpreadsheetDocument)

Записать (Write)

Синтаксис:

Записать(<Имя файла>, <Тип файла таблицы>)

   mythos

16 — 05.08.10 — 15:29

После сохранения его можно открыть средствами COM, и там проставить одной ячейке формулу, а потом программно «растянуть» эту формулу на колонку.

   mythos

17 — 05.08.10 — 15:34

Excel = Новый COMОбъект(«Excel.Application»);

Excel.Workbooks.Open(ИмяФайлаОбработки);

Excel.Range(«AD» + КоличествоСтрокВЭкселе).Select();

Excel.Application.ActiveCell.FormulaR1C1 = «=RC[-2]*RC[-1]»;

Excel.Application.Selection.AutoFill(Excel.Range(«AD» + ПерваяСтрока + «:AD» + КоличествоСтрокВЭкселе), 0);

Здесь AD — буквенный номер столбца с формулой

   mythos

18 — 05.08.10 — 15:35

Количество строк в экселе можно получить так:

КоличествоСтрокВЭкселе = Excel.Cells.SpecialCells(11).Row;

   programmistochka

19 — 05.08.10 — 15:57

не получается….

в форму — в «Результат» — выводится результат СКД, ниже поле выбора файла для сохранения:

Процедура ФайлНачалоВыбора(Элемент, СтандартнаяОбработка)

// Выделим имя каталога из имени файла

   ИмяКаталога = Файл;

   ДлинаСтроки = СтрДлина( Файл );

   Для Пц = 1 По ДлинаСтроки Цикл

       Симв = сред(Файл, ДлинаСтроки — Пц + 1, 1);

       Если Симв = «» Тогда

           ИмяКаталога = Лев(Файл, ДлинаСтроки — Пц);

           Прервать;

       КонецЕсли;

   КонецЦикла;

   
   Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);

   Диалог.Каталог = ИмяКаталога;

   
   Режим = РежимДиалогаВыбораФайла.Сохранение;

   ДиалогСохраненияФайла = Новый ДиалогВыбораФайла(Режим);

   ДиалогСохраненияФайла.ПолноеИмяФайла = «»;

   Фильтр = «Лист Excel97(*.xls)|*.xls»;

   ДиалогСохраненияФайла.Фильтр = Фильтр;

   
   Если ДиалогСохраненияФайла.Выбрать() = Истина Тогда

       Файл = ДиалогСохраненияФайла.ВыбранныеФайлы.Получить(0);

   КонецЕсли;

   
   ЭлементыФормы.Результат.Записать(Файл );

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

Файл эксель — абракадабра получается, а если большой список в отчете (без отборов — весь справочник Номенклатура), то эксель ругается что файл загружен не полностью:

Это сообщение может появиться, если:

Попытка открыть файл, содержащий более 65 536 строк или 256 столбцов. Чтобы устранить это затруднение, откройте исходный файл в текстовом редакторе, например Microsoft Word. Сохраните исходный файл, разделив его на несколько меньших файлов, удовлетворяющих ограничениям на число строк и столбцов, а затем откройте эти меньшие файлы в приложении Excel. Если не удается открыть исходный файл в текстовом редакторе, попробуйте импортировать данные в Microsoft Access, а затем экспортировать подмножества данных из Access в Excel.

Попытка вставить данные, разделенные знаком табуляции, в слишком маленькую область. Чтобы устранить это затруднение, выделите в таблице область, в которой могут поместиться все элементы с разделением.

Примечания.>

Настройка приложения Excel на превышение предела в 65 536 строк и 256 столбцов не предусмотрена.

По умолчанию книга Excel состоит из трех листов. Каждый лист может содержать до 65 536 строк и 256 столбцов данных, книги могут состоять из более чем трех листов; при этом у компьютера должен быть достаточный объем оперативной памяти для работы с дополнительными данными.

   programmistochka

20 — 05.08.10 — 15:58

а если ручками сохранять — файл — сохранить копию — *.exl — то прекрасно сохраняется все — с группировками и цветастенько

   programmistochka

21 — 05.08.10 — 16:06

ТабличныйДокумент (SpreadsheetDocument)

Записать (Write)

Синтаксис:

Записать(<Имя файла>, <Тип файла таблицы>)

Записывает табличный документ в файл.

Примечание:

При работе на сервере или через com-соединение использует только файлы форматов mxl и txt.

   mythos

22 — 05.08.10 — 16:19

Здесь:

ЭлементыФормы.Результат.Записать(Файл );

Надо указывать тип файла

ТипФайлаТабличногоДокумента (SpreadsheetDocumentFileType)

Значения

HTML (HTML)

HTML3 (HTML3)

HTML4 (HTML4)

MXL (MXL)

MXL7 (MXL7)

TXT (TXT)

XLS (XLS)

XLS95 (XLS95)

XLS97 (XLS97)

   mythos

23 — 05.08.10 — 16:19

ЭлементыФормы.Результат.Записать(Файл, ТипФайлаТабличногоДокумента.XLS97);

   programmistochka

24 — 05.08.10 — 16:24

урраааа)))) работает))) тра-ля-пам-пам))))) Спасибо,  mythos ;*

   mythos

25 — 05.08.10 — 16:28

а как же формулы? сохранить-то полдела….

   Zeldan

26 — 05.08.10 — 17:10

(25)я же говорил фото решает….

   programmistochka

27 — 06.08.10 — 10:16

Сохранять — самое важное было)) формулы работают

  

programmistochka

28 — 06.08.10 — 10:17

Zeldan, ты бы лучше помогал, а не фото разглядывал)))

yakov
17.09.2014 08:47 Прочитано: 5422

Как с помощью регламентного задания выгрузить результат отчета на СКД в файл Excel? 

Заранее спасибо!)

Yandex
Возможно, вас также заинтересует

Реклама на портале

E_Migachev
17.09.2014 11:46 Ответ № 1

Через скд формируй результат в табличный документ и сохраняй его в xls, вот на эту тему:

Пример программного вызова СКД отчета

Программный вывод отчета СКД

примерный код:

Код 1C v 8.х

 //Получаем схему из макета
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");

//Из схемы возьмем настройки по умолчанию
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;

//Помещаем в переменную данные о расшифровке данных
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

//Формируем макет, с помощью компоновщика макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

//Передаем в макет компоновки схему, настройки и данные расшифровки
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);

//Выполним компоновку с помощью процессора компоновки
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);

//Очищаем поле табличного документа
РезультатТД = Новый ТабличныйДокумент;

//Выводим результат в табличный документ
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(РезультатТД);

ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);   
РезультатТД.записать("C:123.xls", ТипФайлаТабличногоДокумента.XLS);

Подсказка: Для быстрого поиска ответов — используйте ‘Поиск’
Рекомендовать в новости

med

0

31.07.2012 — 08:44


УПП
Создан дополнительный отчет
создается таблица значений — она передается в СКД
как сделать выгрузку в Excell, что бы получилось так же как сохранение в Excell из самой СКД?
Т.е. с группировками, заголовками и т.д. ?

med

1

31.07.2012 — 09:19

Вопрос снят это оказывается так элементарно…

ЭлементыФормы.Результат.Записать(«c:proba.xls»,»x ls»);

Где «Результат» — Поле табличного документа куда собственно и выводится СКД

Гость

2

31.07.2012 — 14:16

(1) забавно, не знал, спасибо :)

Гость

3

03.08.2012 — 10:54

Интересно как сохранить несколько отчетов отдельными листами в один файл Екселя?

Uho

4

03.08.2012 — 11:04

OLE

Гость

5

03.08.2012 — 11:11

Штатно. Через OLE работать с каждым полем слишком примитивно и трудоемко.

Uho

6

03.08.2012 — 11:21

5-kerm > зачем с каждым полем?

med

7

03.08.2012 — 13:46

Ну или без элемента формы
ТабДокН = Новый ТабличныйДокумент;
……….. ……. ……… …….
Имя=»c:windowstempЗТ-«+Год(ТекущаяДата())+»-«+Месяц(ТекущаяДата())+»-«+День(ТекущаяДата())+».xls»;
ТабДокН.Записать(Имя,»xls»);
ОтправитьЭмайл(Имя);
Попытка
УдалитьФайлы(Имя);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;

Uho

8

03.08.2012 — 14:17

7-med > что за чушь?

med

9

03.08.2012 — 14:24

8-Uho > не нравится — не ешь
мне нужно файл в экселовском формате в виде СКД — со всеми группировками отправлять в автоматическом режиме раз в сутки по электронной почте.

Uho

10

03.08.2012 — 14:34

9-med > я не про почту (ибо в данной теме про почту никто не говорил), а про вот это:

ТабДокН = Новый ТабличныйДокумент;
……….. ……. ……… …….
Имя=»c:windowstempЗТ-«+Год(ТекущаяДата())+»-«+Месяц(ТекущаяДата())+»-«+День(ТекущаяДата())+».xls»;
ТабДокН.Записать(Имя,»xls»);

med

11

06.08.2012 — 06:47

10-Uho >
Ну хорошо , подскажи тогда , как бы ты создал файлик для последующей отправки, что бы работало на любом компе ?
Мне вот чисто Сисадмин посоветовал, что такой каталог есть на 99 % компьютеров и открыт для записи.

Гость

12

06.08.2012 — 07:18

КаталогВременныхФайлов()

med

13

07.08.2012 — 14:30

12-Удар копытом > Спасибо, попробую…

16.05.2017

Перерыв весь интернет не смог найти простого способа сохранить отчет с большим числом строк в формате Excel. Везде предлагалось писать процедуры построчной записи, ADO, COMSafeArray и прочее.
Метод же, используемый во всех найденный публикациях «Результат.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.XLSX)», не работает при большом числе строк.
Публикация http://infostart.ru/public/77128/ натолкнула на простую идею, которую и реализовал.

Для того чтобы сохранить результат любого отчета (главное чтобы результат выводился в ТабличноеПоле) в формате Excel с большим числом строк (типовая 1с ругается при превышении их числа в 65535),
используется следующий простой метод.

1. Сначала сохраняем табличное поле как файл формата «Документ HTML4» (//infostart.ru/public/77128/).
2. Полученный файл программно открываем и пересохраняем в нужном формате Excel.

Для реализации — в реквизиты формы отчета добавляем «ПутьКФайлу» — тип строка, к которому добавим функцию «ПутьКФайлуНачалоВыбора»

&НаКлиенте
Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

СтандартнаяОбработка = Ложь;
РежимДиалога = РежимДиалогаВыбораФайла.Сохранение;
ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалога);
ДиалогВыбораФайла.МножественныйВыбор = Ложь;
ДиалогВыбораФайла.Заголовок = "Укажите путь выгрузки файла...";
ДиалогВыбораФайла.ПолноеИмяФайла = ПутьКФайлу;
ДиалогВыбораФайла.Фильтр = "Excel(2007)(*.xlsx)|*.xlsx";
Если ДиалогВыбораФайла.Выбрать() Тогда
ПутьКФайлу = ДиалогВыбораФайла.ПолноеИмяФайла;
КонецЕсли;

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

Также на форму выводим кнопку «ФормаКнопкаСохранитьВЭксель», с командой «СохранитьВЭксель»

&НаКлиенте
Процедура СохранитьВЭксель(Команда)

ИмяФайлаHTML4 = СтрЗаменить(ПутьКФайлу,"xlsx","htm");
    Результат.Записать(ИмяФайлаHTML4,ТипФайлаТабличногоДокумента.HTML4);

Попытка
ЭксельОбъект = Новый COMОбъект("Excel.Application");
ЭксельОбъект.Application.Visible = Ложь;
Книга = ЭксельОбъект.Application.Workbooks.Open(ИмяФайлаHTML4);
Книга.Windows(1).Visible = Истина;
Книга.Application.DisplayAlerts = False;
Книга.SaveAs(ПутьКФайлу,51);
Книга.Close();
ЭксельОбъект.Application.Quit();
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;

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

Дополнительно.
Для того чтобы не было потери информации (особенно в части чисел), рекомендуется использовать в 1С, при выводе числовых показателей, следующий формат сумм:
ЧЦ=15; ЧДЦ=2; ЧРД=,; ЧГ=0

P.S. Исправлена строчка кода (приводила к невозможности в некоторых случаях увидеть полученный результат), новая строка выглядит так: 

Книга.Windows(1).Visible = Истина;



Выгрузка отчета в таблицу/дерево значений

Использование нескольких схем компоновки данных в одном отчете
СКД. Вывод информации табличной части в одну ячейку.

Недавно появилась задачка, необходимо создать отчет, который требуется выгружать в Excel. Написал запрос, создал схему компоновки данных и отчет готов, результат компоновки выводится в табличный документ. Приступил к реализации вывода отчетных данных в Excel и призадумался, а как же это лучше сделать?

Оказывается, результат компоновки данных можно выводить в таблицу значений или дерево значений для последующей программной обработки. Для этого предназначен объект языка программирования ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений. У этого объекта имеется метод УстановитьОбъект(), который является аналогом метода УстановитьДокумент() объекта ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент.

Привожу пример вывода результата компоновки в таблицу значений:


Функция СкомпоноватьРезультатВКоллекциюЗначений() Экспорт

тзКомпоновщикМакет = Новый КомпоновщикМакетаКомпоновкиДанных;
тзМакетКомпоновкиДанных = тзКомпоновщикМакет.Выполнить(
СхемаКомпоновкиДанных,
КомпоновщикНастроек.ПолучитьНастройки(),
,
,
Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

тзПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
тзПроцессорКомпоновкиДанных.Инициализировать(тзМакетКомпоновкиДанных);

тзРезультат = Новый ТаблицаЗначений;



тзПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
тзПроцессорВывода.УстановитьОбъект(тзРезультат);
тзПроцессорВывода.Вывести(тзПроцессорКомпоновкиДанных);

Возврат тзРезультат;

КонецФункции // СкомпоноватьРезультатВКоллекциюЗначений()

Эту функцию я поместил в модуль отчета, что бы можно было вызывать её как из обычной так и из управляемой формы. Далее я успешно обхожу все строки таблицы значений в цикле и вывожу их в Excel.

При выводе результата компоновки в таблицу или дерево значений существуют следующие ограничения:

  • в настройках должны присутствовать только группировки и детальные записи. Использование таблиц, диаграмм и вложенных отчетов не допускается;
  • все папки, указанные в выбранных полях, игнорируются;
  • не используется условное оформление, а также оформление для поля, указанное в схеме компоновки данных;
  • из параметров вывода используются только следующие: расположение общих итогов по вертикали; тип заголовка полей; количество записей; процент записей;
  • предопределенные макеты не используются.

Like this post? Please share to your friends:
  • Результат расчета в калькуляторах можно распечатать или перенести в word
  • Результат работы ms word
  • Результат от деления в excel
  • Результат команды если в excel в формулу
  • Результат в формулах не выводится в excel