Ошибка при установке значения атрибута контекста numberformat

   zmb

24.07.07 — 18:26

Борюсь с такой вот фигней:



Книга = Новый ComОбъект(«Excel.Application»);

Книга.Application.Workbooks.Open(ИмяФайла);

Лист = Книга.Worksheets(1);

Лист.Range(«A1:A10).NumberFormat = «[$$-409]#,##0.00»; //собсно тут и ругается

Сама ошибка — «Ошибка при установке значения атрибута контекста (NumberFormat): Произошла исключительная ситуация (Microsoft Office Excel): Нельзя установить свойство NumberFormat класса Range»

Через поиско я понял, что был далеко не одинок в данной проблеме, не раз находил для себя, вроде бы и новое решение, перебивая модуль, надеясь, что щас вот оно заработает, но проблема не решалась, в итоге вылез на такой вот обнадеживающий топик:

http://forum.foxclub.ru/read.php?28,253200,253200,quote=1

Платформа у меня 8.0.18.2

Знает кто вообще, решаема ли эта проблема, и как?

   zmb

1 — 24.07.07 — 18:28

   NS

2 — 24.07.07 — 18:31

не верю!

Синтаксический контроль конструкция из (0) не пройдет.

Лист.Range(«A1:A10).

Это как?

   zmb

3 — 24.07.07 — 18:42

уважаемый, я это не из рабочего модуля копировал, а просто набросал для примера, чтобы лишь в общем показать о чем реч. За синтаксис сори, а где именно ошибка, я показал…

   NS

4 — 24.07.07 — 18:57

Помню глюк с точкой. Вместо точки в 0.00 попробуй запятую.

   zmb

5 — 24.07.07 — 19:01

Мда, формат таки записался, спасибо уже прогресс :)

   NS

6 — 24.07.07 — 19:03

(5) Спасибо в карман не положишь :)

   zmb

7 — 24.07.07 — 19:05

Странно, хотя через те же макросы выдал точку

   у лю 427

8 — 24.07.07 — 19:06

(5) самое прикольное, что на другой машине у тебя может и не записаться…

И это зависит от региональных установок и экселя…

P.S. решение этой проблемы есть…

   NS

9 — 24.07.07 — 19:06

(7) Фича известная. И давняя. Помницца Бекас никак не мог решение найти.

   у лю 427

10 — 24.07.07 — 19:08

(9) так и не нашел? там же все примитивно делается….

   asady

11 — 24.07.07 — 19:11

(0)

вот так работает:

  WorkBook=Application.WorkBooks.Open(«Z:test.xls»);

   Скрипт=Новый COMОбъект(«MSScriptControl.ScriptControl»);

   Скрипт.Language = «javascript»;

   List = WorkBook.Worksheets(1);

   Скрипт.AddObject(«List»,List);

   Скрипт.eval(«List.Range(«»A1:A10″»).NumberFormat = «»[$$-409]#,##0.00″»;»);

   WorkBook.save();

   Application.Quit();

   NS

12 — 24.07.07 — 19:18

(9) Про замену точки на запятую я ему сказал, а дальше разобрался он аль нет я не знаю.

ExcelApplication.International?

   NS

13 — 24.07.07 — 19:21

Проблема похоже в том, что NumberFormat из 1C срабатывает как NumberFormatLocal

   у лю 427

14 — 24.07.07 — 19:37

(13) возможно. У меня были такие подозрения, но решение нашел раньше…

P.S. причем не оязательно точка-запятая…

(11) пристроенный к телеге паровоз…

   ШтушаКутуша

15 — 24.07.07 — 19:39

(0)
Книга = Новый ComОбъект(«Excel.Application»);
КакБыКнига=Книга.Application.Workbooks.Open(ИмяФайла);

   smaharbA

16 — 24.07.07 — 19:50

Ексель.ReferenceStyle=1;
Лист.Range(«A1:A10).NumberFormatLocal = «[$$-409]#,##0.00»;

   smaharbA

17 — 24.07.07 — 19:52

Вернее
Ексель.ReferenceStyle=1;
Лист.Range(«A1:A10).NumberFormatLocal = «[$$-409]# ##0,00»;

   NS

18 — 24.07.07 — 19:52

(16) А это тут причем???

   smaharbA

19 — 24.07.07 — 19:53

(18) см (17)

   smaharbA

20 — 24.07.07 — 19:53

+(18) а референсе на всяк случай, если стиль ссылок не тот, то все — пипец

   NS

21 — 24.07.07 — 19:53

(19) У него Range() и так срабатывает.

   NS

22 — 24.07.07 — 19:55

NumberFormatLocal ничего не меняет.

   smaharbA

23 — 24.07.07 — 19:56

(22) меняет, см (17)

   NS

24 — 24.07.07 — 19:58

(23) Смотрю, длина строки выросла на 5 символов. Больше ничего не изменилось :)

Запятая ошибочная убрана в шаблоне, но сработает точно так-же как и NumberFormat

   smaharbA

25 — 24.07.07 — 20:00

NS я тебя конечно уважаю, но счас проверю и напишу, все работает, это уж точно, тема была уже далеко не один разок

   NS

26 — 24.07.07 — 20:00

см. (8) и (12,13)

   NS

27 — 24.07.07 — 20:01

(25) Угу, и так-же всё работает с NumberFormat

   smaharbA

28 — 24.07.07 — 20:12

[1C]
//*******************************************

Процедура Сформировать()

   Ексель=СоздатьОбъект(«Excel.Application»);

   Ексель.ReferenceStyle=1;

   Книги=Ексель.Workbooks;

   Книга=Книги.Add();

   Листы=Книга.Worksheets;

   Лист=Листы.item(1);

   Ячейки=Лист.Cells;

   Диапазон=Ячейки.Range(«A1:A10»);

   Диапазон.NumberFormatLocal = «[$$-409]# ##0,00»;

   Сообщить(Ячейки.Range(«A1»).NumberFormat);

   Сообщить(Ячейки.Range(«A1»).NumberFormatLocal);

   Ячейки.Range(«A1»).Value=10245.23;

   Ячейки.Range(«A1»).EntireColumn.AutoFit();

   Сообщить(Ячейки.Range(«A1»).Text);

   Ексель.Visible=-1;

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

[/1C]

   NS

29 — 24.07.07 — 20:14

Ну и?

А если теперь попробовать

Диапазон.NumberFormat = «[$$-409]# ##0,00»;

   smaharbA

30 — 24.07.07 — 20:15

(27) работает, если формат «локаль» задан, как в (17)

   smaharbA

31 — 24.07.07 — 20:15

(29) да

   NS

32 — 24.07.07 — 20:16

Да, в смысле они работают одинаково? :)

   smaharbA

33 — 24.07.07 — 20:16

(32) ага ))

   NS

34 — 24.07.07 — 20:18

Блин, немного поцарапали машину, повезли ремонтировать по Каско.

Там всё сделали, и сказали (показали) что машина крашенная!!!

Не поверили — нам показали целый цех, где КРАСЯТ НОВЫЕ МАШИНЫ.

Говорят 30% новых машин царапанные/битые.

   smaharbA

35 — 24.07.07 — 20:21

(34) жизнь прошла стороной ?

   smaharbA

36 — 24.07.07 — 20:22

я тут приору увидал, десятка лучче…

   NS

37 — 24.07.07 — 20:23

(35) Собирались её продавать — теперь уйдет чуть дешевле :(

по идее пустяки, но новость меня ошарашила. Там варят и красят новые иномарки ценой 30, 40, 50 Килобаксов. Люди думая что покупают новую машину в салоне, на самом деле покупают битую машину.

   NS

38 — 24.07.07 — 20:25

(36) У нас 15-ая, с модным черным бампером. Оказалось что заводские бамперы только черные. В итоге оказалось что купили в салоне машину с битыми и перекрашенными бамперами, и перекрашена одна задняя дверь. Покупали три года назад — наверно сейчас салону уже претензий не предъявить…

   NS

39 — 24.07.07 — 20:25

Опечатался — заводские только серые.

   у лю 427

40 — 24.07.07 — 20:27

(34) а ты ВИДЕЛ УСЛОВИЯ ПЕРЕВОЗКИ?

Везли спецзаказом тачку в КОНТЕЙНЕРЕ — так эти уроды буржуи ее даже толком не закрепили, один борт протерся до дыр. Меняли дверь и крыло.

В автовозах — что угодно бывает…

P.S. в контейнере тачку не закрепили толком, но фиксаторы максимальных ускорений — ПОСТАВИЛИ!!! Полные уроды. Хорошо, что ни один не сработал. Так что выставили счет на 35 штук баксов за ремонт, шлифовку и покраску…

   NS

41 — 24.07.07 — 20:29

(40) Нет, не видел, но теперь знаю :(

Покупать новую машину резко расхотелось :(

  

Torquader

42 — 25.07.07 — 14:54

Excel — загадочная вещь.

Региональные установки для Excel и для 1C могут быть разные.

Кроме того, всё зависит от версии Excel.

P.S. а зачем такой сложный формат нужен ?

This code has been working for ages. I thought maybe I accidently pressed a key but I cannot seem to see it. I suddenly get the error:

Unable to set the NumberFormat property of the Range class

in the below code:

Worksheets("Sheet1").Cells(y + k, x + j).Select
TempValue = Worksheets("Sheet1").Cells(y + k, x + j).Value
Worksheets("Sheet1").Cells(y + k, x + j).NumberFormat = "#,##0" //ERROR HERE
Worksheets("Sheet1").Cells(y + k, x + j).Value = TempValue

Siddharth Rout's user avatar

asked May 29, 2012 at 14:50

intrigued_66's user avatar

intrigued_66intrigued_66

15.8k51 gold badges118 silver badges186 bronze badges

8

The problem as discovered in Chat was the workbook had more than 64,000 formats because of which the user was getting the «Too many different cell formats» error message in Excel

Solution

Topic: You receive a «Too many different cell formats» error message in Excel

Link: http://support.microsoft.com/kb/213904

QUOTE from the above link

In Microsoft Excel 2007/2010 files may produce the following error message;

Excel found unreadable content in the file

This problem occurs when the workbook contains more than approximately 4,000 different combinations of cell formats in Excel 2003 or 64,000 in Excel 2007 and higher.

Solution as mentioned in the link is to download and run the XLStyesTool

Community's user avatar

answered May 29, 2012 at 15:35

Siddharth Rout's user avatar

Siddharth RoutSiddharth Rout

147k17 gold badges206 silver badges250 bronze badges

0

I met with this problem using Fuzzy LookUp AddIn in Office365ProPlus.
After I run FuzzyLookUp only 10 rows of output were generated and this message popped up.

Problem was caused by my local setting of Excell.

To fix it I had to change decimal separator from coma into dot under general Excel settings.

On my side it solved the problem perfectly.

answered Nov 7, 2019 at 14:15

Tomas Paul's user avatar

jediAlex

4 / 4 / 4

Регистрация: 12.07.2011

Сообщений: 627

1

15.12.2016, 13:55. Показов 4837. Ответов 3

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Здравствуйте. Пытаюсь вывести из табличной части обработки 1с дату в ячейку Excel:

1C
1
2
Лист.Cells(Стр + 4, 8).Value = Строка(ТаблицаВыгрузки[Стр].ДатаОкончанияРабот);
Лист.Cells(Стр + 4, 8).NumberFormat= "ДД.ММ.ГГГГ";

Excel воспринимает дату как текст -NumberFormat не срабатывает. Как вывести дату в формате даты, а не текста?



0



Joker_vad

Эксперт 1С

476 / 413 / 93

Регистрация: 26.09.2012

Сообщений: 1,912

15.12.2016, 14:01

2

1C
1
Лист.Cells(Стр + 4, 8).NumberFormat= "dd/mm/yyyy";



0



jediAlex

4 / 4 / 4

Регистрация: 12.07.2011

Сообщений: 627

15.12.2016, 14:17

 [ТС]

3

сделал:

1C
1
Лист.Cells(Стр + 4, 8).NumberFormat= "dd/mm/yyyy";

вывалилась ошибка при выполнении:

1C
1
2
3
4
{Обработка.ФормированиеПроизводственногоПланаНаГод.Форма.Форма.Форма(208)}: Ошибка при установке значения атрибута контекста (NumberFormat)
                    Лист.Cells(Стр + 4, 7).NumberFormat= "dd/mm/yyyy";
по причине:
Произошла исключительная ситуация (Microsoft Excel): Нельзя установить свойство NumberFormat класса Range



0



Dethmontt

Модератор

Эксперт 1С

3722 / 2917 / 574

Регистрация: 10.03.2011

Сообщений: 11,489

Записей в блоге: 1

22.12.2016, 13:01

4

1C
1
2
Лист.Cells(Стр + 4, 8).NumberFormat= "ДД.ММ.ГГГГ";
Лист.Cells(Стр + 4, 8).Value = ТаблицаВыгрузки[Стр].ДатаОкончанияРабот;



0



Многие знают, что Excel гораздо старше 1С. На мой взгляд, это очень успешный продукт, и нареканий о нем я не слышал. Excel прост и универсален. Он способен выполнять не только простые арифметические операции, но и сложные вычисления, построение графиков и т.п. Знаю примеры, когда организации до перехода на 1С вели часть бухгалтерии в Excel. Многие и сейчас параллельно используют две программы. В этой статье рассмотрим способы обмена данными между 1С и Excel.

Таблицы 1С и Excel.

Многие пользователи для удобства работы сохраняют таблицы 1С (печатные формы) в формате Excel (*.xls). После чего в полученном файле делают различные группировки, сортировки, вычисления и т.п. Связано это с тем, что в таблицах 1С нет такого огромного функционала как в таблицах Excel. Но в версии 1С 8.0 есть нововведения, делающих работу с таблицами более комфортной.

Замечание: В Excel разделителем дробной части считается символ «,». Поэтому перед сохранением таблицы 1С в формате Excel замените в ней другой разделитель (например «.») на «,». Иначе в Excel с этими числами не удастся произвести вычисления, или они вообще не будут отображаться как числа. Например, в таблице 1С «15.2» отобразится в Excel как «15.фев».

Получение данных из Excel.

Доступ из 1С к Excel производится посредством OLE. Например, код

Попытка
Эксель= СоздатьОбъект(«Excel.Application»);
Исключение

Сообщить(ОписаниеОшибки() + » Программа Exсel не установлена на данном компьютере!»);
Возврат;

КонецПопытки;

позволит нам получить доступ через переменную «Эксель» к запущенному приложению Excel. А далее уже можно получить доступ к книге (файлу), листу и ячейке с данными. Далее примеры кода.

Открытие книги (файла):

Книга=Эксель.WorkBooks.Open(ПутьКФайлу);

ПутьКФайлу — полный путь к файлу книги Excel.

Выбор листа книги для работы с ним:

Лист=Книга.WorkSheets(НомерЛиста);

или

Лист=Книга.WorkSheets(ИмяЛиста);

НомерЛиста — номер листа в книге, ИмяЛиста — имя листа в книге.

Получение значения ячейки листа:

Значение=Лист.Cells(НомерСтроки,НомерКолонки).Value;

НомерСтроки, НомерКолонки — номер строки и номер колонки, на пересечении которых находится ячейка.

Важно: не забывайте поле выполнения нужных действий добавлять кодЭксель.Quit();, иначе запущенный процесс останется незавершенным и будет занимать память и процессор компьютера.

Вывод данных в Excel.

Для вывода (выгрузки) данных в Excel необходимо либо открыть существующую книгу, либо

создать новую, и выбрать рабочий лист для вывода данных. Открытие существующей книги описано выше, а для создания новой книги нужно использовать следующий код:

Попытка
Эксель= СоздатьОбъект(«Excel.Application»);
Исключение

Сообщить(ОписаниеОшибки() + » Программа Exсel не установлена на данном компьютере!»);
Возврат;

КонецПопытки;
Книга=Эксель.WorkBooks.Add();

Так как при создании книги в Excel автоматически создаются листы (Сервис->Параметры->Общие->Листов в новой книге), то нужно лишь произвести выбор листа, с которым будет вестись работа:

Лист=Книга.WorkSheets(НомерЛиста);

либо добавить в книгу новый лист, если необходимо:
Лист=Книга.Sheets.Add();

Следующим шагом будет установка значения ячейки:
Лист.Cells(НомерСтроки,НомерКолонки).Value=Значение;

НомерСтроки, НомерКолонки — номер строки и номер колонки, на пересечении которых находится ячейка.

И в конце нужно произвести запись созданной книги:

Попытка
Книга.SaveAs(ПутьКФайлу);
Исключение

Сообщить(ОписаниеОшибки()+» Файл не сохранен!»);
Возврат;

КонецПопытки;

ПутьКФайлу — полный путь к файлу книги Excel (включая имя).

Важно: не забывайте, что в имени файлов не должно содержаться символов / : * ? » > < |.

Часто используемые методы для чтения/установки значений в Excel.

Эксель = СоздатьОбъект(«Excel.Application»); Получение доступа к приложению Excel.

Эксель.Visible = Видимость;

0 — Excel не виден, 1 — виден.

Книга = Эксель.WorkBooks.Add();

Создание новой книги (файла) Excel.

Книга.SaveAs(ИмяФайла);

Сохранение книги Excel.

Лист = Книга.WorkSheets.Add();

Добавление нового листа в книгу.

Книга = Эксель.WorkBooks.Open(ИмяФайла);

Открытие существующей книги (файла) Excel.

Лист = Книга.WorkSheets(НомерЛиста);

Установка листа в качестве рабочего с номером НомерЛиста.

Лист.Name = ИмяЛиста;

Задание рабочему листу имени ИмяЛиста

Лист.PageSetup.Zoom = Масштаб;

Задание параметра страницы «Масштаб» (от 10 до 400).

Лист.PageSetup.Orientation = Ориентация;

Ориентация: 1 — книжная, 2 — альбомная.

Лист.PageSetup.LeftMargin = Эксель.CentimetersToPoints(Сантиметры);

Задание левой границы (в сантиметрах).

Лист.PageSetup.TopMargin =

Эксель.CentimetersToPoints(Сантиметры);

Задание верхней границы (в сантиметрах).

Лист.PageSetup.RightMargin =

Эксель.CentimetersToPoints(Сантиметры);

Задание правой границы (в сантиметрах).

Лист.PageSetup.BottomMargin =

Эксель.CentimetersToPoints(Сантиметры);

Задание нижней границы (в сантиметрах).

Лист.Columns(НомерКолонки).ColumnWidth = Ширина;

Задание ширины колонке.

Лист.Cells(НомерСтроки,НомерКолонки).Value = Значение;

Ввод данных в ячейку.

Лист.Cells(НомерСтроки,НомерКолонки).Font.Name = ИмяШрифта;

Установка шрифта в ячейке.

Лист.Cells(НомерСтроки,НомерКолонки).Font.Size = РазмерШрифта;

Установка размера шрифта в ячейке.

Лист.Cells(НомерСтроки,НомерКолонки).Font.Bold = Жирный;

1 — жирный шрифт, 0 — нормальный.

Лист.Cells(НомерСтроки,НомерКолонки).Font.Italic = Курсив;

1 — наклонный шрифт, 0 — нормальный.

Лист.Cells(НомерСтроки,НомерКолонки).Font.Underline =

Подчеркнутый;

2 — подчеркнутый, 1 — нет.

Лист.Cells(НомерСтроки, НомерКолонки).NumberFormat =

Формат;

Установка формата данных ячейки.

Лист.Cells(НомерСтроки,НомерКолонки).Borders.Linestyle =

ТипЛинии;

Установка рамок ячейки. 1 — тонкая сплошная.

Постоянный адрес статьи http://exp-1c.narod.ru/articles/articl01.htm

Ermak
21.02.2013 12:52 Прочитано: 19119

Добрый день! Подскажите может кто делал такое, чтобы выводить отчет в excel. Например у меня есть форма в excel

title

в конфигураторе есть два документа Материалы для авто и Материалы для самолетов с реквизитами Организация и табл. частью номенклатура, кол-во, цена, сумма. Как сделать чтобы сформировались данные в этой форме excel.

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

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

E_Migachev
21.02.2013 14:36 Ответ № 1

(0) Ermak, так выведи в табличный документ и сохрани как excel

Ermak
21.02.2013 14:45 Ответ № 2

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

E_Migachev
21.02.2013 14:48 Ответ № 3

(2) Ermak, вот пример выгрузки
Код 1C v 8.х

 Попытка
// Загрузка объекта Microsoft Excel
Состояние("Выгрузка данных из 1С в Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при запуске Microsoft Excel."
+ Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;

// Создадим книгу, по умолчанию в ней уже есть листы
Книга = ExcelПриложение.WorkBooks.Add();

// Используем первый лист книги Excel
Лист = Книга.WorkSheets(1);

// Сформировать шапку документа в первой строке листа
Колонка = 1;
Для каждого стр из ТП цикл
Если стр.Выгружать Тогда
Лист.Cells(1, Колонка).Value = стр.НазваниеРеквизита;
Колонка = Колонка + 1;
КонецЕсли;
КонецЦикла;

// Выгрузить данные справочника
выборка = Справочники[ИмяСправочника].Выбрать();
СтрокаЛиста = 2;
Пока выборка.Следующий() Цикл
Колонка = 1;
Для каждого стр из ТП цикл

Если стр.Выгружать Тогда
Попытка
// Установить значение в строке и колонке
Если ТипЗнч(выборка[стр.НазваниеРеквизита])=Тип("Число") Тогда
// Установить формат для типа Число
Лист.Cells(СтрокаЛиста, Колонка).NumberFormat = "0,00";
Лист.Cells(СтрокаЛиста, Колонка).Value =
Формат(выборка[стр.НазваниеРеквизита],"ЧГ=0");
иначе
// Для всех других типов установим формат "Текстовый"
Лист.Cells(СтрокаЛиста, Колонка).NumberFormat = "@";
Лист.Cells(СтрокаЛиста, Колонка).Value =
Строка(выборка[стр.НазваниеРеквизита]);
КонецЕсли;
исключение
// в случае ошибки вывести номер строки и колонки
Сообщить("Ошибка установки значения для: " +
выборка[стр.НазваниеРеквизита]);
Сообщить("Стр: " +СтрокаЛиста+ " Кол: " +
Колонка+ " Рек: " + стр.НазваниеРеквизита);
КонецПопытки;
Колонка = Колонка + 1;
КонецЕсли;

КонецЦикла;
СтрокаЛиста = СтрокаЛиста + 1;
Состояние("Экспорт из 1С в Excel " + СтрокаЛиста);
КонецЦикла;

// Сохраним созданную книгу в файл xls
Книга.SaveAs(имяФайла);

// Обязательно закроем соединение с COM объектом для освобождения памяти
ExcelПриложение.Quit();

Сообщить("Файл выгружен успешно: " + имяФайла );

подробнее: v8.x: Выгрузка данных в Excel с установкой разных параметров

Ermak
21.02.2013 15:01 Ответ № 4

(3) E_Migachev, А есть у вас в файле обработки и что получится в excel, так нагляднее будет?

E_Migachev
21.02.2013 15:48 Ответ № 5

(4) Ermak, вот пример: Скачивать файлы может только зарегистрированный пользователь!
1C обработка выгружает выбранный справочник в Excel

E_Migachev
21.02.2013 15:55 Ответ № 6

+ пример выгрузки с указанием Конкретных ячеек:
Код 1C v 8.х

 Попытка
Состояние("Загрузка Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
ExcelФайл = ExcelПриложение.WorkBooks.Open(ИмяВременногоФайла);

Состояние("Обработка файла Microsoft Excel...");

ExcelЛист = ExcelФайл.Sheets(1);

ExcelЛист.Cells(8, 7).Value = Формат(ТекущаяДата(), "ДЛФ=ДД") + " г.";
ExcelЛист.Cells(10, 10).Value = Пользователь;
ExcelЛист.Cells(11, 10).Value = "Почта" + Емеля;
ExcelЛист.Cells(13, 10).Value = Моб;

Для каждого СтрокаТабл из ТаблДанных Цикл
Строка = Число(Сред(СтрокаТабл.Адрес, 2, Найти(ВРег(СтрокаТабл.Адрес), "C") - 2));
Столбец = Число(Сред(СтрокаТабл.Адрес, Найти(ВРег(СтрокаТабл.Адрес), "C") + 1));

ExcelЛист.Cells(Строка, Столбец).Value = СтрокаТабл.Значение;
КонецЦикла;

Ermak
21.02.2013 18:27 Ответ № 7

(6) E_Migachev, Выгрузка справочника в эксель это не то, а вот пример по выгрузки с указанными ячейками это мне нужно, можете пример показать?

E_Migachev
22.02.2013 01:55 Ответ № 8

так это же один и тот же код, только в обработке по выгрузке справочников ячейка указывается программно:
Код 1C v 8.х

 Лист.Cells(СтрокаЛиста, Колонка).Value   

а тут принудительно:
Код 1C v 8.х

 ExcelЛист.Cells(13, 10).Value    
Ermak
22.02.2013 08:39 Ответ № 9

(8) E_Migachev, я хотел бы посмотреть, как сделать обращение к переменой, например я в форме напишу переменную «КолМатерАвто» и в эту переменю буду заноситься данные с документа. И как прописать если у меня будет 1000 строк чтобы он заносил данные куда надо.

Mokey
22.02.2013 10:14 Ответ № 10

(9) Ermak «И как прописать если у меня будет 1000 строк чтобы он заносил данные куда надо»,
в цикле, пока 1000 строк не переберёте, а куда надо , так в (8) E_Migachev, уже сказали.

Ermak
22.02.2013 10:21 Ответ № 11

а по этому? » я хотел бы посмотреть, как сделать обращение к переменой, например я в форме напишу переменную «КолМатерАвто» и в эту переменю буду заноситься данные с документа»

Ermak
22.02.2013 10:23 Ответ № 12

(10) Mokey, Это указывается определенная ячейкаКод 1C v 8.х

  ExcelЛист.Cells(13, 10).Value    

А как прописать чтобы он по данной колонки и строке заполнял N количество

Mokey
22.02.2013 10:24 Ответ № 13

(11) Ermak,

Лист.Cells(СтрокаЛиста, Колонка).Value = КолМатерАвто;

Mokey
22.02.2013 10:26 Ответ № 14

точнее вопрос можно услышать? я пока не догоняю, что Вы хотите изобразить, к сожалению.

Ermak
22.02.2013 10:29 Ответ № 15

Я так понимаю этим кодом 1С будет искать переменную КолМатерАвто в форме excel и подставлять данные. А переменная КолМатерАвто должна также называться как и в документе от куда будут браться данные или нет?Код 1C v 8.х

 Лист.Cells(СтрокаЛиста, Колонка).Value = КолМатерАвто;   
Mokey
22.02.2013 10:36 Ответ № 16

При чём тут переменная эксель, если Вы из документа (или откуда-то из 1С) выгружаете?

Ermak
22.02.2013 12:28 Ответ № 17

Я где то видел пример с вордом, пишеться перемена в форме ворда и когда идет выгрузка данных из 1с в ворд то данные подставляются в переменые в форме ворда, вот я и про эксель так и думаю, если в экселе прописать переменую в какой нибудь ячейки то как будут данные попадать с 1с в эту ячейку? Конечно может я что то не так понимаю.


Изменено 22.02.13 12:29:08

Mokey
22.02.2013 13:41 Ответ № 18

(17) Ermak Конечно может я что то не так понимаю., вот это правильное утверждение. )))

Mokey
22.02.2013 13:43 Ответ № 19

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

Ermak
22.02.2013 14:09 Ответ № 20

(19) Mokey, а можете показать пример полностью готового код а не кусочекКод 1C v 8.х

  Попытка
Состояние("Загрузка Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
ExcelФайл = ExcelПриложение.WorkBooks.Open(ИмяВременногоФайла);

Состояние("Обработка файла Microsoft Excel...");

ExcelЛист = ExcelФайл.Sheets(1);

ExcelЛист.Cells(8, 7).Value = Формат(ТекущаяДата(), "ДЛФ=ДД") + " г.";
ExcelЛист.Cells(10, 10).Value = Пользователь;
ExcelЛист.Cells(11, 10).Value = "Почта" + Емеля;
ExcelЛист.Cells(13, 10).Value = Моб;

Для каждого СтрокаТабл из ТаблДанных Цикл
Строка = Число(Сред(СтрокаТабл.Адрес, 2, Найти(ВРег(СтрокаТабл.Адрес), "C") - 2));
Столбец = Число(Сред(СтрокаТабл.Адрес, Найти(ВРег(СтрокаТабл.Адрес), "C") + 1));

ExcelЛист.Cells(Строка, Столбец).Value = СтрокаТабл.Значение;
КонецЦикла;

Mokey
22.02.2013 14:51 Ответ № 21

а зачем строку и столбец таким извращённым способом вычислять? И второе: СтрокаТабл.Значение… Значение — это что, колонка таблицы значений?

Ermak
22.02.2013 15:18 Ответ № 22

(21) Mokey, Это мне пример показал (6) E_Migachev, если есть что наглядней можете показать

Mokey
22.02.2013 15:20 Ответ № 23

Я не знаю Ваших задач, а примеров кучу можно показать, но они все разные будут, Вам какую задачу надо решить?

Ermak
22.02.2013 18:00 Ответ № 24

(23) Mokey, я здесь описал, (0) Ermak

Ermak
26.02.2013 09:57 Ответ № 25

*03

Mokey
26.02.2013 10:00 Ответ № 26

(25) Ermak, применительно к Вашей проблеме есть два варианта:
1. Создать шаблон эксель и на основании него заполнять таблицу (код заполнения описан тут выше, естесственно, применяете к Вашей задаче)
2. Создавать чистую книгу, заполнять её (см. выше) и форматировать (объединяя ячейки).

Вы скажите, на каком этапе у Вас случился затык?


Изменено 26.02.13 10:03:31

Ermak
26.02.2013 10:27 Ответ № 27

мне нужен первый вариант, но код который написан выше он ссылается на ячейку а мне нужно к переменно которая будет написана в ячейки эксель шаблона, вот я и прошу покажите пример как обращаться к переменной

E_Migachev
26.02.2013 12:26 Ответ № 28

(27) Ermak, к переменной ни как, только к ячейкам:
Код 1C v 8.х

 Попытка
Состояние("Загрузка Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
ExcelФайл = ExcelПриложение.WorkBooks.Open(ИмяВременногоФайла);

Состояние("Обработка файла Microsoft Excel...");

ExcelЛист = ExcelФайл.Sheets(1);

ExcelЛист.Cells(8, 7).Value = Формат(ТекущаяДата(), "ДЛФ=ДД") + " г.";
ExcelЛист.Cells(10, 10).Value = Пользователь;
ExcelЛист.Cells(11, 10).Value = "Почта" + Емеля;
ExcelЛист.Cells(13, 10).Value = Моб;

Для каждого СтрокаТабл из ТаблДанных Цикл
Строка = Число(Сред(СтрокаТабл.Адрес, 2, Найти(ВРег(СтрокаТабл.Адрес), "C") - 2));
Столбец = Число(Сред(СтрокаТабл.Адрес, Найти(ВРег(СтрокаТабл.Адрес), "C") + 1));

ExcelЛист.Cells(Строка, Столбец).Value = СтрокаТабл.Значение;
КонецЦикла;

КонецЕсли;

ExcelПриложение.Visible = истина;

Mokey
26.02.2013 16:43 Ответ № 29

(27) Ermak, минуточку, а откуда в экселе взялась переменная?
(9) Ermak, вот тут вижу, но что Вы вкладываете в слово «Форма»? вот что меня выбило из седла! Форма в Вашем понимании — это экселевский документ, что ли?


Изменено 26.02.13 16:45:38

Ermak
26.02.2013 17:07 Ответ № 30

Да в моем контексте я имел ввиду Форма экселевский документ )

Mokey
27.02.2013 11:57 Ответ № 31

(30) Ermak, скажите, а зачем Вам переменную в экселе иметь? Чем не нравится (или тяжело) заполнять ячейки адресно? В ворде понятно, там не к чему «привязаться», поэтому в текст (шаблон) вставляют переменные, которые заменяются на искомый текст. А в экселе и так всё поделено уже на квадратики, только заполняй, хоть вдоль, хоть поперёк)))


Изменено 27.02.13 11:58:59

Ermak
27.02.2013 14:14 Ответ № 32

(31) Mokey, понятно

Mokey
27.02.2013 15:21 Ответ № 33

(32) Ermak, с таким подходом вы не найдёте ответов на Ваши вопросы. Я бы, например, был не прочь посмотреть на Форму эксель с переменной.

Ermak
27.02.2013 17:15 Ответ № 34

(33) Mokey, Я вроде писал что я видел в ворде как сделано, там используется перемена вот и думал что аналогично в экселе делается, но теперь буду пробовать с ячейками. Спасибо за помощь. )

Mokey
27.02.2013 17:41 Ответ № 35

(34) Ermak, так ведь в самом начале сказали, что нельзя, а Вы всё не верили. Удачи.

Ermak
04.03.2013 10:46 Ответ № 36

(28) E_Migachev, подскажите пример как обратиться к самому шаблону эксель, который лежит в папки.

E_Migachev
04.03.2013 11:35 Ответ № 37

Код 1C v 8.х

 ExcelФайл = ExcelПриложение.WorkBooks.Open(ИмяВременногоФайла);   

где ИмяВременногоФайла — путь к файлу

Ermak
06.03.2013 10:10 Ответ № 38

У меня таблицы значений из за этого ругается

{Форма.Форма.Форма(23,29)}: Переменная не определена (ТаблДанных)

Как можно по другому сделать

Код 1C v 8.х

 Процедура КнопкаВыполнитьНажатие(Кнопка)
Попытка
Состояние("Загрузка Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
ExcelФайл = ExcelПриложение.WorkBooks.Open("D:1c1.xls");

Состояние("Обработка файла Microsoft Excel...");
Док = Документы.ОказаниеУслуги.НайтиПоРеквизиту();
ExcelЛист = ExcelФайл.Sheets(1);

ExcelЛист.Cells(8, 7).Value = Формат(ТекущаяДата(), "ДЛФ=ДД") + " г.";
ExcelЛист.Cells(10, 10).Value = Док.Клиент.Наименование;
//ExcelЛист.Cells(11, 10).Value = "Почта" + Емеля;
//ExcelЛист.Cells(13, 10).Value = Моб;

Для каждого СтрокаТабл из ТаблДанных Цикл
Строка = Число(Сред(СтрокаТабл.Адрес, 2, Найти(ВРег(СтрокаТабл.Адрес), "C") - 2));
Столбец = Число(Сред(СтрокаТабл.Адрес, Найти(ВРег(СтрокаТабл.Адрес), "C") + 1));

ExcelЛист.Cells(Строка, Столбец).Value = СтрокаТабл.Значение;
КонецЦикла;

//КонецЕсли;

ExcelПриложение.Visible = истина;

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

Mokey
06.03.2013 10:30 Ответ № 39

(38) Ermak, так она по этому кусочку кода и неопределена. Что у Вас ТаблДанных?

Ermak
06.03.2013 10:39 Ответ № 40

У меня нет таблицы данных, я беру данные с реквизитов Док.Клиент.Наименование;

Mokey
06.03.2013 10:45 Ответ № 41

А как Вы тогда обращаетесь к ТаблДанных? Объявите её в процедуре, инициализируйте и тогда обращайтесь. Или обращайтесь непосредственно к реквизитам Док.Клиент…..

Ermak
06.03.2013 10:48 Ответ № 42

Покажите пример как обращаться к реквизитам.

Mokey
06.03.2013 10:53 Ответ № 43

Во-первых, надо знать, откуда запускается эта процедура
Во-вторых, какие вообще реквизиты есть и какого типа данных.
Если Адресная информация в Вашем случае — это табличная часть справочника, то надо непосредственно так:
Для Каждого СтрокаТабл Из Док.Клиент.ТЧ_Адреса, где ТЧ_Адреса — это та самая табличная чать, в Вашем случае может по-другому называться
Да, и здесь мы подразумеваем, что процедура запускается в теле модуля Док, у которого есть реквизит Клиент.


Изменено 06.03.13 10:54:58

Ermak
06.03.2013 11:15 Ответ № 44

1. Процедура запускается с внешней обработки
2. тип справочник, но может быть и числовой
3. Я не понимаю что за табличная часть ТЧ_Адреса
Возьмем на пример документ оказание услуг, мне нужно выгрузить реквизит Клиент и реквизит с табличной части Ценна, покажите пример как это сделать

Mokey
06.03.2013 12:05 Ответ № 45

у меня нет под рукой документа ОказаниеУслуг, к сожалению. Что-то мы всё вокруг да около ходим. Клиент — это реквизит документа, а Цена — реквизит табличной части, так?
как вызывается внешняя обработка? как в неё передаётся ссылка (или объект) на документ?
Как называется ТЧ документа?
(много вопросов, потому что Вы хотите конкретный пример под Ваши потребности, не желая подставлять в приведённые коды свои данные)

Ermak
06.03.2013 12:10 Ответ № 46

1. Клиент и Цена это правильно
2. Внешняя обработка вызывается просто через файл открыть, вы это имели ввиду?
Передается так
Код 1C v 8.х

 Док = Документы.ОказаниеУслуги.НайтиПоРеквизиту();   

3. ТЧ документа называется ПереченьНоменклатуры

Mokey
06.03.2013 12:41 Ответ № 47

Код 1C v 8.х

 Для каждого СтрокаТабл из Док.ПереченьНоменклатуры Цикл
Строка = Число(Сред(СтрокаТабл.Адрес, 2, Найти(ВРег(СтрокаТабл.Адрес), "C") - 2));
Столбец = Число(Сред(СтрокаТабл.Адрес, Найти(ВРег(СтрокаТабл.Адрес), "C") + 1));
ExcelЛист.Cells(Строка, Столбец).Value = СтрокаТабл.Цена;
КонецЦикла;

Я подразумеваю, что в ПереченьНоменклатуры есть реквизиты Адрес и Цена
Только мне всё равно непонятно, зачем такие сложности в поиске Строки и Столбца, какой в этом великий смысл, объясните, пожалуйста.


Изменено 06.03.13 12:43:05

Ermak
06.03.2013 12:56 Ответ № 48

Выдал ошибку

{Форма.Форма.Форма(14)}: Недостаточно фактических параметров
Док = Документы.ОказаниеУслуги.НайтиПоРеквизиту();

В ПереченьНоменклатуры есть реквизиты только Цена, адреса нет вообще.
У меня есть очень сложный шаблон excel, я хочу сделать около 10 документов куда будут заполняться значения а потом с помощью обработки выгружать эти значения с документов в этот шаблон excel.

Ermak
06.03.2013 13:10 Ответ № 49

Че та я запутался, вот мой кодКод 1C v 8.х

 Процедура КнопкаВыполнитьНажатие(Кнопка)
Попытка
Состояние("Загрузка Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
ExcelФайл = ExcelПриложение.WorkBooks.Open("D:1c1.xls");

Состояние("Обработка файла Microsoft Excel...");
Док = Документы.ОказаниеУслуги.НайтиПоРеквизиту();
ExcelЛист = ExcelФайл.Sheets(1);

ExcelЛист.Cells(8, 7).Value = Формат(ТекущаяДата(), "ДЛФ=ДД") + " г.";
ExcelЛист.Cells(10, 10).Value = Док.Клиент.Наименование;
//ExcelЛист.Cells(11, 10).Value = "Почта" + Емеля;
//ExcelЛист.Cells(13, 10).Value = Моб;

Для каждого СтрокаТабл из Док.ПереченьНоменклатуры Цикл
Строка = Число(Сред(СтрокаТабл.Адрес, 2, Найти(ВРег(СтрокаТабл.Адрес), "C") - 2));
Столбец = Число(Сред(СтрокаТабл.Адрес, Найти(ВРег(СтрокаТабл.Адрес), "C") + 1));
ExcelЛист.Cells(Строка, Столбец).Value = СтрокаТабл.Цена;
КонецЦикла;

//КонецЕсли;

ExcelПриложение.Visible = истина;

Попытка
ExcelФайл.SaveAs("D:1c1.xls");
Исключение
Сообщить(ОписаниеОшибки()+" Файл не сохранен!");
Возврат;
КонецПопытки;
КонецПроцедуры


Изменено 06.03.13 13:12:18

Mokey
06.03.2013 13:52 Ответ № 50

Это только кусочек кода, проблема в вызове процедуры
Док = Документы.ОказаниеУслуги.НайтиПоРеквизиту();
зачем такое?
Строка = Число(Сред(СтрокаТабл.Адрес, 2, Найти(ВРег(СтрокаТабл.Адрес), «C») — 2));
что тогда Адрес в этом примере?

Ermak
06.03.2013 14:07 Ответ № 51

Что то я совсем запутался, давай те с начала, я писал что у меня один реквизит Клиент а второй Тбличная Часть — ПереченьНоменклатуры — Цена

Этим я ищу реквизит Клиент

Код 1C v 8.х

 Док = Документы.ОказаниеУслуги.НайтиПоРеквизиту();    

Передаю данные в ячейку

Код 1C v 8.х

 ExcelЛист.Cells(10, 10).Value = Док.Клиент.Наименование;

А как сделать потом его в цикле я не понимаю!

И реквизит Цена то не понимаю как задать чтобы его данные попадали в шаблон excel

Mokey
06.03.2013 15:04 Ответ № 52

Этим я ищу реквизит Клиент

Код 1C v 8.х
Док = Документы.ОказаниеУслуги.НайтиПоРеквизиту();

Где Вы тут ищете и что?
Цикл я Вам написал уже, просто, видимо, Вы выдернули откуда-то кусок кода, а как его применить, и возможно ли его применить, не знаете.

Док = Документы.ОказаниеУслуги.НайтиПоРеквизиту(Клиент, «Клиент»);
тогда уж так
а цикл я Вам уже показал

Ermak
06.03.2013 15:35 Ответ № 53

Док = Документы.ОказаниеУслуги.НайтиПоРеквизиту(Клиент, «Клиент»);
тогда уж так

а если у меня 20 будет реквизитов к каждому обращаться, или есть способ лучше?

Ermak
06.03.2013 15:37 Ответ № 54

Всеравно не понимаю Док.ПереченьНоменклатуры это обращается к табличной части ПереченьНоменклатуры но к ней относиться только реквизит Цена а Клиент не в ТЧ

Mokey
06.03.2013 15:41 Ответ № 55

Понимаете ли, НайтиПоРеквизиту() — это не обращение, это поиск в базе ссылки, в данном случае документа, по искомому реквизиту. Я теперь уже и не знаю, в каком направлении Вас консультировать, то ли азы 1С, но в таком случае говорится «учите матчасть», потому что без неё выгрузить в эксель будет трудно.
Я пытался задать наводящие вопросы по Вашему же коду, чтобы давать конкретные советы, но Вы запутались совсем))


Изменено 06.03.13 15:42:40

Ermak
06.03.2013 17:10 Ответ № 56

тогда я уже очень сильно запутался, давно не обращался к 1С *01

Ermak
06.03.2013 17:18 Ответ № 57

Подскажите как обращаться к реквизитам с внешней обработки?

Mokey
07.03.2013 09:38 Ответ № 58

Для начала, нужно найти (или передать в обработку) ссылку на объект, к реквизитам которго Вы хотите обращаться. А там уже как обычно, в примерах выше показано, как обращаться, через точку.

Ermak
07.03.2013 12:08 Ответ № 59

В этом у меня путаница как выбрать, покажите на примере


Изменено 07.03.13 12:08:45

Ermak
07.03.2013 12:27 Ответ № 60

Сделал так но почему то не выводит значение Цена а только ДатуКод 1C v 8.х

 Процедура КнопкаВыполнитьНажатие(Кнопка)
Попытка
Состояние("Загрузка Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
ExcelФайл = ExcelПриложение.WorkBooks.Open("D:1c1.xls");

Состояние("Обработка файла Microsoft Excel...");

ExcelЛист = ExcelФайл.Sheets(1);

Док = Документы.ОказаниеУслуги.ПолучитьСсылку();

ExcelЛист.Cells(8, 7).Value = Формат(ТекущаяДата(), "ДЛФ=ДД") + " г.";

Для каждого СтрокаТабл из Док.ПереченьНоменклатуры Цикл
Строка = Число(Сред(СтрокаТабл.Цена, 2, Найти(ВРег(СтрокаТабл.Цена), "C") - 2));
Столбец = Число(Сред(СтрокаТабл.Цена, Найти(ВРег(СтрокаТабл.Цена), "C") + 1));
ExcelЛист.Cells(2, 2).Value = СтрокаТабл.Цена;
КонецЦикла;

ExcelПриложение.Visible = истина;

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


Изменено 07.03.13 12:27:42

Ermak
07.03.2013 12:56 Ответ № 61

Попробовал таким способом, теперь выводит но почему то только одного клиента а их у меня пять, почему не понимаюКод 1C v 8.х

 Процедура КнопкаВыполнитьНажатие(Кнопка)
Попытка
Состояние("Загрузка Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
ExcelФайл = ExcelПриложение.WorkBooks.Open("D:1c1.xls");

Состояние("Обработка файла Microsoft Excel...");

ExcelЛист = ExcelФайл.Sheets(1);

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОказаниеУслуги.Ссылка,
| ОказаниеУслуги.ПометкаУдаления,
| ОказаниеУслуги.Номер,
| ОказаниеУслуги.Дата,
| ОказаниеУслуги.Проведен,
| ОказаниеУслуги.Склад,
| ОказаниеУслуги.Клиент,
| ОказаниеУслуги.Мастер,
| ОказаниеУслуги.ОбъектОснование,
| ОказаниеУслуги.ПереченьНоменклатуры.(
| Ссылка,
| НомерСтроки,
| Номенклатура,
| Количество,
| Цена,
| Сумма
| )
|ИЗ
| Документ.ОказаниеУслуги КАК ОказаниеУслуги";

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Док = Выборка.Ссылка.ПолучитьОбъект();
ExcelЛист.Cells(8, 7).Value = Формат(ТекущаяДата(), "ДЛФ=ДД") + " г.";
ExcelЛист.Cells(10, 10).Value = Док.Клиент.Наименование;
КонецЦикла;

ExcelПриложение.Visible = истина;

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

Ermak
12.03.2013 15:12 Ответ № 62

Сделал такую процедуруКод 1C v 8.х

 	 Попытка
Состояние("Загрузка Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
ExcelФайл = ExcelПриложение.WorkBooks.Open("D:1c1.xls");

Состояние("Обработка файла Microsoft Excel...");

ExcelЛист = ExcelФайл.Sheets(1);

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Проба1.Номенклатура,
| СУММА(Проба1.Количество) КАК Количество,
| СУММА(Проба1.Цена) КАК Цена,
| СУММА(Проба1.Стоимость) КАК Стоимость
|ИЗ
| РегистрНакопления.Проба1 КАК Проба1
|
|СГРУППИРОВАТЬ ПО
| Проба1.Номенклатура";

Результат = Запрос.Выполнить().Выбрать();
НомерСтроки = 1;
Пока Результат.Следующий() Цикл
ExcelЛист.Cells(Номерстроки, 1).Value = Результат.Номенклатура.Наименование;
ExcelЛист.Cells(Номерстроки, 3).Value = Результат.Количество;
ExcelЛист.Cells(Номерстроки, 4).Value = Результат.Цена;
ExcelЛист.Cells(Номерстроки, 5).Value = Результат.Стоимость;

НомерСтроки = НомерСтроки + 1;
КонецЦикла;

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Проба2.Номенклатура,
| СУММА(Проба2.Количество) КАК Количество,
| СУММА(Проба2.Цена) КАК Цена,
| СУММА(Проба2.Стоимость) КАК Стоимость
|ИЗ
| РегистрНакопления.Проба2 КАК Проба2
|
|СГРУППИРОВАТЬ ПО
| Проба2.Номенклатура";

Результат = Запрос.Выполнить().Выбрать();
НомерСтроки = 4;
Пока Результат.Следующий() Цикл
ExcelЛист.Cells(Номерстроки, 1).Value = Результат.Номенклатура.Наименование;
ExcelЛист.Cells(Номерстроки, 3).Value = Результат.Количество;
ExcelЛист.Cells(Номерстроки, 4).Value = Результат.Цена;
ExcelЛист.Cells(Номерстроки, 5).Value = Результат.Стоимость;

НомерСтроки = НомерСтроки + 1;
КонецЦикла;

ExcelПриложение.Visible = истина;

Выдает ошибку

{Форма.Форма.Форма(56)}: Ошибка при вызове метода контекста (Выполнить)
Результат = Запрос2.Выполнить().Выбрать();
по причине:
{(1, 1)}: Ожидается выражение «ВЫБРАТЬ»

Ermak
12.03.2013 15:16 Ответ № 63

Хотел еще спросить как сделать, нужно чтобы Номенклатура выводилась в одну колонку по порядку строки из двух регистров, у меня сейчас первый регистр должен выводить номенклатуру в 1 строке а второй регистр выводить номенклатуру в 4 строке. Может я конечно что то не так делаю поправьте меня.

Mokey
12.03.2013 15:17 Ответ № 64

(62) Ermak, в показанном коде нет такой строки

Ermak
12.03.2013 15:19 Ответ № 65

(64) Mokey, извиняюсь перепутал. Подскажите по этому (63) Ermak,

Mokey
12.03.2013 15:20 Ответ № 66

(63) Ermak, создайте один запрос-объединение, тогда обход будет по одной коллекции значений

Ermak
12.03.2013 16:07 Ответ № 67

Подскажите как правильно сделать запрос-объединение, я что то не правильно делаюКод 1C v 8.х

 Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Организация,
| Квартал,
| Номенклатура,
| Группа,
| Подгруппа,
| БазЕдиница,
| Тип,
| Количество КАК ФКоличество,
| Цена КАК ФЦена,
| Сумма КАК ФСумма
|ИЗ
| РегистрНакопления.Форма1 КАК Форма1"
|ОБЪЕДИНИТЬ
|ВЫБРАТЬ
| Организация,
| Квартал,
| Номенклатура,
| Группа,
| Подгруппа,
| БазЕдиница,
| Тип,
| Количество КАК ФорКоличество,
| Цена КАК ФорЦена,
| Сумма КАК ФорСумма
|ИЗ
| РегистрНакопления.Форма2 КАК Форма2";

Результат = Запрос.Выполнить().Выбрать();

Mokey
12.03.2013 16:48 Ответ № 68

Код 1C v 8.х

 Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Форма1.Организация КАК Организация,
| Форма1.Квартал КАК Квартал,
| Форма1.Номенклатура КАК Номенклатура,
| Форма1.Группа КАК Группа,
| Форма1.Подгруппа КАК Подгруппа,
| Форма1.БазЕдиница КАК БазЕдиница,
| Форма1.Тип КАК Тип,
| Количество КАК ФКоличество,
| Цена КАК ФЦена,
| Сумма КАК ФСумма,
| 0 КАК ФорКоличество,
| 0 КАК ФорЦена,
| 0 КАК ФорСумма
|ИЗ
| РегистрНакопления.Форма1 КАК Форма1"
|ОБЪЕДИНИТЬ
|ВЫБРАТЬ
| Форма2.Организация,
| Форма2.Квартал,
| Форма2.Номенклатура,
| Форма2.Группа,
| Форма2.Подгруппа,
| Форма2.БазЕдиница,
| Форма2.Тип,
| 0,
| 0,
| 0,
| Форма2.Количество,
| Форма2.Цена,
| Форма2.Сумма
|ИЗ
| РегистрНакопления.Форма2 КАК Форма2";

Результат = Запрос.Выполнить().Выбрать();

Ermak
12.03.2013 17:13 Ответ № 69

Все получилось большое спасибо!!!
*05

Вопросик еще один, выгрузил я в ecel, если у ячейки нет значения то ставит 0, а можно сделать чтобы чистая ячейка оставалась?

А если я буду объединять три или n регистров, как тогда будет
| 00,
| 00,
| 00,

и т.д


Изменено 12.03.13 17:23:41

Mokey
12.03.2013 17:39 Ответ № 70

(69) Ermak
А если я буду объединять три или n регистров, как тогда будет
| 00,
| 00,
| 00,
, нет, сколько будете добавлять, столько будет строчек, каждая строчка — это поле в запросе и, соответственно, колонка в итоговой таблице. А 0 выводит, потому что формат ячейки, по всей видимости, текст, а надо общий или число, тогда 0 не будет выводиться.

Ermak
12.03.2013 19:09 Ответ № 71

(70) Mokey, Спасибо большое!

Ermak
13.03.2013 11:14 Ответ № 72

Я переделал свой запрос, сделал по проще. Не понимаю почему выдает оишбку

{Форма.Форма.Форма(114)}: Ошибка при установке значения атрибута контекста (Value)
ExcelЛист.Cells(Номерстроки, 20).Value = Результат.ФорКоличество;
по причине:
Произошла исключительная ситуация (0x800a03ec)

Код 1C v 8.х

  Попытка
Состояние("Загрузка Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
ExcelФайл = ExcelПриложение.WorkBooks.Open("D:1c1.xls");

Состояние("Обработка файла Microsoft Excel...");

ExcelЛист = ExcelФайл.Sheets(1);

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВЫБОР
| КОГДА Форма1.Регистратор ССЫЛКА Документ.Форма1
| ТОГДА Форма1.Количество
| ИНАЧЕ ЗНАЧЕНИЕ(Документ.Форма1.ПустаяСсылка)
| КОНЕЦ КАК ФКоличество,
| ВЫБОР
| КОГДА Форма1.Регистратор ССЫЛКА Документ.Форма2
| ТОГДА Форма1.Количество
| ИНАЧЕ ЗНАЧЕНИЕ(Документ.Форма2.ПустаяСсылка)
| КОНЕЦ КАК ФорКоличество,
| ВЫБОР
| КОГДА Форма1.Регистратор ССЫЛКА Документ.Форма1
| ТОГДА Форма1.Цена
| ИНАЧЕ ЗНАЧЕНИЕ(Документ.Форма1.ПустаяСсылка)
| КОНЕЦ КАК ФЦена,
| ВЫБОР
| КОГДА Форма1.Регистратор ССЫЛКА Документ.Форма2
| ТОГДА Форма1.Цена
| ИНАЧЕ ЗНАЧЕНИЕ(Документ.Форма2.ПустаяСсылка)
| КОНЕЦ КАК ФорЦена,
| ВЫБОР
| КОГДА Форма1.Регистратор ССЫЛКА Документ.Форма1
| ТОГДА Форма1.Сумма
| ИНАЧЕ ЗНАЧЕНИЕ(Документ.Форма1.ПустаяСсылка)
| КОНЕЦ КАК ФСумма,
| ВЫБОР
| КОГДА Форма1.Регистратор ССЫЛКА Документ.Форма2
| ТОГДА Форма1.Сумма
| ИНАЧЕ ЗНАЧЕНИЕ(Документ.Форма2.ПустаяСсылка)
| КОНЕЦ КАК ФорСумма,
| Форма1.Номенклатура,
| Форма1.Группа,
| Форма1.Подгруппа,
| Форма1.БазЕдиница,
| Форма1.Тип
|ИЗ
| РегистрНакопления.Форма1 КАК Форма1";

Результат = Запрос.Выполнить().Выбрать();
НомерСтроки = 2;
Пока Результат.Следующий() Цикл
ExcelЛист.Cells(Номерстроки, 1).Value = Результат.Группа;
ExcelЛист.Cells(Номерстроки, 2).Value = Результат.Подгруппа;
ExcelЛист.Cells(Номерстроки, 3).Value = Результат.Номенклатура.Наименование;
ExcelЛист.Cells(Номерстроки, 4).Value = Результат.Тип;
ExcelЛист.Cells(Номерстроки, 5).Value = Результат.БазЕдиница;
ExcelЛист.Cells(Номерстроки, 10).Value = Результат.ФКоличество;
ExcelЛист.Cells(Номерстроки, 11).Value = Результат.ФЦена;
ExcelЛист.Cells(Номерстроки, 12).Value = Результат.ФСумма;
ExcelЛист.Cells(Номерстроки, 20).Value = Результат.ФорКоличество;
ExcelЛист.Cells(Номерстроки, 21).Value = Результат.ФорЦена;
ExcelЛист.Cells(Номерстроки, 22).Value = Результат.ФорСумма;

НомерСтроки = НомерСтроки + 1;
КонецЦикла;

ExcelПриложение.Visible = истина;

Ermak
13.03.2013 11:25 Ответ № 73

Разобрался в чем ошибка!
Вот исходный код кому интересенКод 1C v 8.х

  Попытка
Состояние("Загрузка Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
ExcelФайл = ExcelПриложение.WorkBooks.Open("D:1c1.xls");

Состояние("Обработка файла Microsoft Excel...");

ExcelЛист = ExcelФайл.Sheets(1);

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВЫБОР
| КОГДА Форма1.Регистратор ССЫЛКА Документ.Форма1
| ТОГДА Форма1.Количество
| ИНАЧЕ ЗНАЧЕНИЕ(Документ.Форма1.ПустаяСсылка)
| КОНЕЦ КАК ФКоличество,
| ВЫБОР
| КОГДА Форма1.Регистратор ССЫЛКА Документ.Форма2
| ТОГДА Форма1.Количество
| ИНАЧЕ ЗНАЧЕНИЕ(Документ.Форма2.ПустаяСсылка)
| КОНЕЦ КАК ФорКоличество,
| ВЫБОР
| КОГДА Форма1.Регистратор ССЫЛКА Документ.Форма1
| ТОГДА Форма1.Цена
| ИНАЧЕ ЗНАЧЕНИЕ(Документ.Форма1.ПустаяСсылка)
| КОНЕЦ КАК ФЦена,
| ВЫБОР
| КОГДА Форма1.Регистратор ССЫЛКА Документ.Форма2
| ТОГДА Форма1.Цена
| ИНАЧЕ ЗНАЧЕНИЕ(Документ.Форма2.ПустаяСсылка)
| КОНЕЦ КАК ФорЦена,
| ВЫБОР
| КОГДА Форма1.Регистратор ССЫЛКА Документ.Форма1
| ТОГДА Форма1.Сумма
| ИНАЧЕ ЗНАЧЕНИЕ(Документ.Форма1.ПустаяСсылка)
| КОНЕЦ КАК ФСумма,
| ВЫБОР
| КОГДА Форма1.Регистратор ССЫЛКА Документ.Форма2
| ТОГДА Форма1.Сумма
| ИНАЧЕ ЗНАЧЕНИЕ(Документ.Форма2.ПустаяСсылка)
| КОНЕЦ КАК ФорСумма,
| Форма1.Номенклатура,
| Форма1.Группа,
| Форма1.Подгруппа,
| Форма1.БазЕдиница,
| Форма1.Тип
|ИЗ
| РегистрНакопления.Форма1 КАК Форма1";

Результат = Запрос.Выполнить().Выбрать();
НомерСтроки = 2;
Пока Результат.Следующий() Цикл
ExcelЛист.Cells(Номерстроки, 1).Value = Результат.Группа;
ExcelЛист.Cells(Номерстроки, 2).Value = Результат.Подгруппа;
ExcelЛист.Cells(Номерстроки, 3).Value = Результат.Номенклатура.Наименование;
ExcelЛист.Cells(Номерстроки, 4).Value = Результат.Тип;
ExcelЛист.Cells(Номерстроки, 5).Value = Результат.БазЕдиница;
ExcelЛист.Cells(Номерстроки, 10).Value = Строка(Результат.ФКоличество);
ExcelЛист.Cells(Номерстроки, 11).Value = Строка(Результат.ФЦена);
ExcelЛист.Cells(Номерстроки, 12).Value = Строка(Результат.ФСумма);
ExcelЛист.Cells(Номерстроки, 20).Value = Строка(Результат.ФорКоличество);
ExcelЛист.Cells(Номерстроки, 21).Value = Строка(Результат.ФорЦена);
ExcelЛист.Cells(Номерстроки, 22).Value = Строка(Результат.ФорСумма);

НомерСтроки = НомерСтроки + 1;
КонецЦикла;

ExcelПриложение.Visible = истина;

Ermak
13.03.2013 12:45 Ответ № 74

Я выгрузил данные в эксель, хочу теперь в экселе сложить все данные СУММА() а он не складывает, почему?

Ermak
13.03.2013 12:48 Ответ № 75

Пытаюсь сделать условие по организации, чтобы данные передавались в нужный документ и не работает, что не такКод 1C v 8.х

 	 Попытка
Состояние("Загрузка Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
Если ЭлементыФормы.Организация.Значение = "МКС" Тогда
ExcelФайл = ExcelПриложение.WorkBooks.Open("D:1cМКС.xls");
ИначеЕсли ЭлементыФормы.Организация.Значение = "ППК" Тогда
ExcelФайл = ExcelПриложение.WorkBooks.Open("D:1cППК.xls");
Иначе
Предупреждение ("Выберите организацию!!!");
КонецЕсли;

Состояние("Обработка файла Microsoft Excel...");

ExcelЛист = ExcelФайл.Sheets("Услуги");


Изменено 13.03.13 12:48:56

E_Migachev
13.03.2013 14:23 Ответ № 76

(75) Ermak, потому что организация это справочник и тебе надо сверять ссылкой
или сверяй наименование
Код 1C v 8.х

 Если  СокрЛП(ЭлементыФормы.Организация.Наименование) = "МКС" Тогда   
Ermak
13.03.2013 16:11 Ответ № 77

Выдает ошибку

{Форма.Форма.Форма(22)}: Значение не является значением объектного типа (Sheets)
ExcelЛист = ExcelФайл.Sheets(«Услуги»);

Я выгрузил данные в эксель, хочу теперь в экселе сложить все данные СУММА() а он не складывает, почему?

E_Migachev
13.03.2013 17:15 Ответ № 78

похоже что не получается открыть или прочитать твой файл

Mokey
13.03.2013 19:48 Ответ № 79

(77) Ermak, потому что
ExcelЛист.Cells(Номерстроки, 10).Value = Строка(Результат.ФКоличество);
ExcelЛист.Cells(Номерстроки, 11).Value = Строка(Результат.ФЦена);
ExcelЛист.Cells(Номерстроки, 12).Value = Строка(Результат.ФСумма);
ExcelЛист.Cells(Номерстроки, 20).Value = Строка(Результат.ФорКоличество);
ExcelЛист.Cells(Номерстроки, 21).Value = Строка(Результат.ФорЦена);
ExcelЛист.Cells(Номерстроки, 22).Value = Строка(Результат.ФорСумма);
Вы перевели все числовые значения в строку

Ermak
13.03.2013 21:28 Ответ № 80

(79) Mokey, а как тогда нужно?
так ExcelЛист.Cells(Номерстроки, 10).Value = Результат.ФКоличество; он выдает ошибку, ругается на синтаксис Value

Ermak
14.03.2013 10:17 Ответ № 81

Числовой сделал, ругаеться

{Форма.Форма.Форма(82)}: Преобразование значения к типу Число не может быть выполнено
ExcelЛист.Cells(Номерстроки, 19).Value = Число(Результат.ФорКоличество);

Mokey
14.03.2013 11:29 Ответ № 82

(81) Ermak, потому что Результат.ФорКоличество = Неопределено, или Ссылка какая-то, судя по запросу, скорее всего.
в запросе надо надо делать так:

| ВЫБОР
| КОГДА Форма1.Регистратор ССЫЛКА Документ.Форма1
| ТОГДА Форма1.Количество
| ИНАЧЕ 0
| КОНЕЦ КАК ФКоличество,

Ermak
14.03.2013 11:55 Ответ № 83

(82) Mokey, все получилось спасибо. Я на счет нулей в ячейках где нет значений, я сделал формат ячейки Общий, все равно нули, может можно через код как то сделать?

Mokey
14.03.2013 12:02 Ответ № 84

т.е. и в пустом экселевском файле нули в ячейках?

Ermak
14.03.2013 12:42 Ответ № 85

вот скрин файла

title

Mokey
14.03.2013 14:10 Ответ № 86

Попробуйте не выводить значение в ячейку, если оно равно 0.
например:
Код 1C v 8.х

 Если Результат.ФКоличество <> 0 Тогда
ExcelЛист.Cells(Номерстроки, 10).Value = Результат.ФКоличество;
КонецЕсли;
Ermak
14.03.2013 16:21 Ответ № 87

(86) Mokey, Все равно выводит 0

Mokey
15.03.2013 09:39 Ответ № 88

(87) Ermak, Значит, формат ячеек на самом листе эксель проверяйте

Ermak
15.03.2013 11:10 Ответ № 89

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

Ermak
29.03.2013 15:15 Ответ № 90

Подскажите что делаю не так

Вот код

Код 1C v 8.х

 Процедура ОсновныеДействияФормыДействие(Кнопка)
Попытка
Состояние("Загрузка Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
ExcelКнига = ExcelПриложение.WorkBooks.Add();

ExcelЛист = ExcelКнига.WorkSheets(1);

Запрос = Новый Запрос (
"ВЫБРАТЬ
| УниверсальнаяЗадача.Ссылка,
| УниверсальнаяЗадача.КомуНазначено КАК КомуНазначено,
| УниверсальнаяЗадача.ЗадачаПоДокументу,
| УниверсальнаяЗадача.КонтрольныйСрок
|ИЗ
| Задача.УниверсальнаяЗадача КАК УниверсальнаяЗадача
|ГДЕ
| УниверсальнаяЗадача.КонтрольныйСрок МЕЖДУ &Дата1 И &Дата2");
Запрос.УстановитьПараметр("Дата1",Дата1);
Запрос.УстановитьПараметр("Дата2",Дата2);

Результат = Запрос.Выполнить().Выбрать();
НомерСтроки = 2;
Пока Результат.Следующий() Цикл
ExcelЛист.Cells(Номерстроки, 1).Value = Результат.КомуНазначено.Наименование;
ExcelЛист.Cells(Номерстроки, 2).Value = Результат.ЗадачаПоДокументу.Наименование;
ExcelЛист.Cells(Номерстроки, 3).Value = Результат.КонтрольныйСрок;
НомерСтроки = НомерСтроки + 1;

КонецЦикла;

ExcelПриложение.Quit();

Сообщить("Файл выгружен успешно завершена");
КонецПроцедуры

1. Почему то после выгрузки просит файл сохранить только потом его открываешь и смотришь, как сделать чтобы он просто открывал файл с выгруженными данными
2. Мне нужно суммировать по реквизиту КомуНазначено, тип справочник Пользователи.
Подскажите


Изменено 29.03.13 15:16:57

Ermak
29.03.2013 16:35 Ответ № 91

СделалКод 1C v 8.х

 "ВЫБРАТЬ
| УниверсальнаяЗадача.Ссылка,
| УниверсальнаяЗадача.КомуНазначено КАК КомуНазначено,
| УниверсальнаяЗадача.ЗадачаПоДокументу,
| УниверсальнаяЗадача.КонтрольныйСрок
|ИЗ
| Задача.УниверсальнаяЗадача КАК УниверсальнаяЗадача
|ГДЕ
| УниверсальнаяЗадача.КонтрольныйСрок МЕЖДУ &Дата1 И &Дата2
|ИТОГИ ПО
| ОБЩИЕ,
| КомуНазначено");

Выдает ошибку
{Форма.ОтчетОбИсполненныхКонтрольныхПоручениях.Форма(53)}: Значение не является значением объектного типа (Наименование)
ExcelЛист.Cells(Номерстроки, 1).Value = Результат.КомуНазначено.Наименование;

Ermak
22.04.2013 15:43 Ответ № 92

Подскажите как мне быть. Я когда то делал такой запрос Код 1C v 8.х

 "ВЫБРАТЬ
| ВЫБОР
| КОГДА Форма1.Регистратор ССЫЛКА Документ.Форма1
| ТОГДА Форма1.Количество
| ИНАЧЕ 0
| КОНЕЦ КАК ФКоличество,
| ВЫБОР
| КОГДА Форма1.Регистратор ССЫЛКА Документ.Форма2
| ТОГДА Форма1.Количество
| ИНАЧЕ 0
| КОНЕЦ КАК ФорКоличество,
| ВЫБОР

Сейчас мне нужно проверить, если значение = Форма №1 тогда …, вот как я стал делать но выдает ошибку

Код 1C v 8.х

 "ВЫБРАТЬ
| ВЫБОР
| КОГДА Форма1.ФормаПЗ.Наименование = "Форма №1"
| ТОГДА Форма1.Количество
| ИНАЧЕ 0
| КОНЕЦ КАК Кол1,
Ermak
23.04.2013 09:20 Ответ № 93

Вопрос закрыт!

Подсказка:Вы можете добавить любую страничку в Социальные закладки щелкнув по значку соцсетей (в вверху)

Понравилась статья? Поделить с друзьями:
  • Ошибка при установке значения атрибута контекста activeconnection
  • Ошибка при установке инстаграм
  • Ошибка при установке защищенного соединения что делать
  • Ошибка при установке игры скайрим
  • Ошибка при установке защищенного соединения firefox как исправить