Ошибка при сохранении в Ексель

1. 1cBokov 7 20.04.17 09:12 Сейчас в теме
Добрый день, пытаюсь сохранить выгрузку в ексель, пишет ошибку (см. скриншот).
Прикрепленные файлы:
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
4. 1cBokov 7 20.04.17 09:20 Сейчас в теме
Вот все продедура выгрузки

Процедура КнопкаВыполнитьНажатие(Кнопка)
	 НомерЛиста         = 1;
   
    //Пытаемся подключиться к Excel
    Попытка
        Excel = новый COMОбъект("Excel.Application");
    Исключение
        Сообщить("Похоже, Excel на компьютере не установлен. Необходимо выполнить установку/переустановку Excel.");
        Возврат;
    КонецПопытки;     
   
    //Подключились удачно, открываем файл
    Excel.Workbooks.Open("C:\Documents and Settings\Программист-3\Рабочий стол\111.xlsx");   
    //Открываем необходимый лист
    Лист = Excel.Sheets(1);   
	ФайлСтрок   = Excel.Cells.CurrentRegion.Rows.Count;
	ФайлКолонок = Макс(Excel.Cells.CurrentRegion.Columns.Count, 19);
	Запрос = Новый Запрос(
	"ВЫБРАТЬ
	|	ХозрасчетныйДвиженияССубконто.Период КАК Период,
	|	ХозрасчетныйДвиженияССубконто.Регистратор КАК Регистратор,
	|	ХозрасчетныйДвиженияССубконто.СчетДт,
	|	ХозрасчетныйДвиженияССубконто.СубконтоДт1,
	|	ХозрасчетныйДвиженияССубконто.СубконтоДт2,
	|	ХозрасчетныйДвиженияССубконто.СубконтоДт3,
	|	ХозрасчетныйДвиженияССубконто.Сумма,
	|	ХозрасчетныйДвиженияССубконто.СчетКт,
	|	ХозрасчетныйДвиженияССубконто.СубконтоКт1,
	|	ХозрасчетныйДвиженияССубконто.ВидСубконтоКт2,
	|	ХозрасчетныйДвиженияССубконто.ВидСубконтоКт3,
	|	ХозрасчетныйДвиженияССубконто.КоличествоДт,
	|	ХозрасчетныйДвиженияССубконто.КоличествоКт,
	|	ХозрасчетныйДвиженияССубконто.СуммаНУКт
	|ИЗ
	|	РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
	|			&НачалоПериода,
	|			&КонецПериода,
	|			СчетКт.Родитель.Код = ""10""
	|				ИЛИ СчетКт.Родитель.Код = ""41""
	|				ИЛИ СчетКт.Родитель.Код = ""08"",
	|			,
	|			) КАК ХозрасчетныйДвиженияССубконто
	|ГДЕ
	|	ХозрасчетныйДвиженияССубконто.Период МЕЖДУ &НачалоПериода И &КонецПериода
	|	И (ХозрасчетныйДвиженияССубконто.Регистратор ССЫЛКА Документ.ТребованиеНакладная
	|			ИЛИ ХозрасчетныйДвиженияССубконто.Регистратор ССЫЛКА Документ.ПередачаМатериаловВЭксплуатацию
	|			ИЛИ ХозрасчетныйДвиженияССубконто.Регистратор ССЫЛКА Документ.ОперацияБух)
	|
	|УПОРЯДОЧИТЬ ПО
	|	Период,
	|	Регистратор");
	Запрос.УстановитьПараметр("НачалоПериода",НачалоГода('20171231000000'));
	Запрос.УстановитьПараметр("КонецПериода",КонецГода('20171231000000'));

	РезультатЗапроса = Запрос.Выполнить().Выбрать();
	a=1;
	Пока РезультатЗапроса.Следующий() Цикл			
				a = a + 1;
				Лист.Cells(a,1).NumberFormat = "@";
				Лист.Cells(a,1).value = Строка(РезультатЗапроса.Регистратор.УникальныйИдентификатор());				
				Лист.Cells(a,2).NumberFormat = "@";
				Лист.Cells(a,2).value = РезультатЗапроса.Регистратор.Номер;
				Лист.Cells(a,3).NumberFormat = "ДД.ММ.ГГГГ";
				Лист.Cells(a,3).value = РезультатЗапроса.Регистратор.Дата;
				Лист.Cells(a,4).NumberFormat = "@";
				Лист.Cells(a,4).value = Строка(РезультатЗапроса.Регистратор);
				//Лист.Cells(a,5).NumberFormat = "@";
				//Лист.Cells(a,5).value = Строка(РезультатЗапроса.СубконтоКт1.НоменклатураАналитики.УИД);
				Лист.Cells(a,6).NumberFormat = "0,00";
				Лист.Cells(a,6).value = РезультатЗапроса.КоличествоКт;
				Лист.Cells(a,7).NumberFormat = "0,00";
				Лист.Cells(a,7).value = РезультатЗапроса.Сумма;
				Лист.Cells(a,8).NumberFormat = "ДД.ММ.ГГГГ";
				Лист.Cells(a,8).value = НачалоМесяца(РезультатЗапроса.Регистратор.Дата);
                Лист.Cells(a,11).NumberFormat = "@";
				Лист.Cells(a,11).value = РезультатЗапроса.СчетДт.Код;
                Лист.Cells(a,19).NumberFormat = "@";
                Лист.Cells(a,19).value = РезультатЗапроса.СубконтоКт1.Наименование;
				Лист.Cells(a,20).NumberFormat = "@";
				Если (РезультатЗапроса.СуммаНУКт > 0) Тогда
					Лист.Cells(a,20).value = "Да";
				КонецЕсли;						
	КонецЦикла;
		
				
							
		Excel.Save();
			
	
Excel.quit();			
КонецПроцедуры
Показать
2. 1cBokov 7 20.04.17 09:15 Сейчас в теме
Если нажимаешь на "да" - заменить этот файл, сохраняется пустой файл ексель, если нажать на "нет" появляется ошибка (см. скриншот №2).
Прикрепленные файлы:
3. PhoenixAOD 62 20.04.17 09:16 Сейчас в теме
с ошибкой то все понятно. метод не завершен. Нужно искать в коде где предварительно записывается этот эксель
5. 1cBokov 7 20.04.17 09:32 Сейчас в теме
(3)Вот этот врагмент кода.
Прикрепленные файлы:
6. 1cBokov 7 20.04.17 09:37 Сейчас в теме
Я вот только не пойму, ошибка эта не всегда появляется, бывает что полностью выгружает данные в ексель. В чем проблема не могу разобраться. Помогите кто сталкивался с подобным.
8. PhoenixAOD 62 20.04.17 09:51 Сейчас в теме
(6)если ошибка не постоянная и иногда сохраняется иногда нормально. то нужно копать в сторону прав пользователя. Попробуйте в шару какую нить залить этот файл и проверить как там будет происходить сохранение. иногда с рабочим столом или Диском С бывают проблемы при записили из 1с
11. 1cBokov 7 20.04.17 10:06 Сейчас в теме
(8)Попробовал не получается, также вываливает ошибку.
13. PhoenixAOD 62 20.04.17 10:10 Сейчас в теме
(11)У меня бывает иногда такая беда на серваке, выгружаю документы в эксель а файлы пустые или с неточными данными. Ковырились с админами, нашли решение иногда ребутать сервак. глупое решение, но оно помогает.
7. 1cBokov 7 20.04.17 09:40 Сейчас в теме
При том как он может там существовать повторно если он там один файл.
9. yaroslav.artem 20.04.17 09:59 Сейчас в теме
Ну а если удалить это файл заранее с каталога, в который сохраняется, всё нормально же?

Я бы другим путем пошёл... создал в обработке макет, такой какой мне нужен, красивый..
заполнил его, по аналогии любой процедуры печати .. ну а там уже всё просто и легко:

Пример короткий:
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("НовыйСозданныйМакетЭтойОбработки");
ОбластьМакета = ПолучитьОбласть("Область1");
областьМАкета.Параметры.Заполнить(РезультатЗапросаИлиЧегоНибудь);///или как вам угодно его заполняйте
Табдок.Вывести(ОбластьМакета);

// и вот тут барабанная дробь, внимание..//
ТабДок.Записать(ТипФайлаТабличногоДокумента.XLSX, НужныйКаталог, Имя)// может наоборот параметры,не помню, посмотрите в синтакс помощнике

и не нужен никакой ЭксельКомАпликейшен.. в этом смысле так сделать даже опимальней, док будет сохраняться даже на компе, где нет экселя.
10. 1cBokov 7 20.04.17 10:05 Сейчас в теме
(9)Удаляю заранее все равно пишет ошибку.
12. 1cBokov 7 20.04.17 10:09 Сейчас в теме
(9)Я по другому просто не могу, как написал, думал все хорошо запишется. А тут какие-то ошибки.
15. yaroslav.artem 20.04.17 10:16 Сейчас в теме
(12)А чего не могу то?Если на выходе один и тот же результат - ЭксельФайл
14. PhoenixAOD 62 20.04.17 10:13 Сейчас в теме
Excel.Workbooks.Open("C:\Documents and Settings\Программист-3\Рабочий стол\111.xlsx"); после этого попробуйте записать документ. и потом с ним уже работать по заполнению. ну и потом уже записать и выйти.
18. 1cBokov 7 20.04.17 10:34 Сейчас в теме
(14)Попробовал теперь он по две такие ошибки дает.
19. PhoenixAOD 62 20.04.17 10:39 Сейчас в теме
(18)Попробуйет сделать как в (9) предложили, тогда действительно думаю должно все пройти как надо
16. gradi 5 20.04.17 10:26 Сейчас в теме
Проверьте, нет ли зависших процессов excel.exe
Часто из-за них возникают подобные ошибки.
17. 1cBokov 7 20.04.17 10:32 Сейчас в теме
(16)проверял нет, все завершая сразу.
20. 1cBokov 7 20.04.17 11:15 Сейчас в теме
Погуглил, нашел небольшую рацуху которая затыкает вот такие как у меня сообщения
Excel.DisplayAlerts = False;
Только вот куда именно с моем коде её ставить, никто не подскажет?
21. v3rter 20.04.17 11:25 Сейчас в теме
(20)
    Excel.DisplayAlerts = False;
    Excel.ScreenUpdating = False;
    Excel.Workbooks.Open("C:\Documents and Settings\Программист-3\Рабочий стол\111.xlsx");  
    //...    
    Excel.ScreenUpdating = True;
    Excel.Save();
22. 1cBokov 7 20.04.17 11:30 Сейчас в теме
(21) После добавления этой строчки ошибка не появляется, но файл не записывается остается пустым
23. v3rter 20.04.17 11:34 Сейчас в теме
Пардон, тоже не обратил внимания

Excel.ActiveWorkbook.Save();

//Excel.ActiveWorkbook.Close(); // закрывает текущий документ Excel - если если надо только сохранить
// или
//Excel.Visible = 1; //  если надо показать пользователю

// Excel = Неопределено; // Excel больше не нужен
24. 1cBokov 7 20.04.17 11:35 Сейчас в теме
(23)это где необходимо вставить?
25. v3rter 20.04.17 11:37 Сейчас в теме
(24) вместо Excel.Save();

Перед каждым прогоном отладки снимайте в диспетчере задач все зависшие процессы EXCEL.EXE Вашего пользователя, они тоже создают ошибки.
26. 1cBokov 7 20.04.17 11:46 Сейчас в теме
(25)Вот смотрите так должно получится


Процедура КнопкаВыполнитьНажатие(Кнопка)
	 НомерЛиста         = 1;
   
    //Пытаемся подключиться к Excel
    Попытка
        Excel = новый COMОбъект("Excel.Application");
    Исключение
        Сообщить("Похоже, Excel на компьютере не установлен. Необходимо выполнить установку/переустановку Excel.");
        Возврат;
    КонецПопытки;     
    Excel.DisplayAlerts = False;
    Excel.ScreenUpdating = False;
    //Подключились удачно, открываем файл
    Excel.Workbooks.Open("C:\Documents and Settings\Программист-3\Рабочий стол\222.xlsx");   
    //Открываем необходимый лист
    Лист = Excel.Sheets(1);   
	ФайлСтрок   = Excel.Cells.CurrentRegion.Rows.Count;
	ФайлКолонок = Макс(Excel.Cells.CurrentRegion.Columns.Count, 19);
	Запрос = Новый Запрос(
	"ВЫБРАТЬ
	|	ХозрасчетныйДвиженияССубконто.Период,
	|	ХозрасчетныйДвиженияССубконто.Регистратор,
	|	ХозрасчетныйДвиженияССубконто.СчетДт,
	|	ХозрасчетныйДвиженияССубконто.СубконтоДт1,
	|	ХозрасчетныйДвиженияССубконто.СубконтоДт2,
	|	ХозрасчетныйДвиженияССубконто.СубконтоДт3,
	|	ХозрасчетныйДвиженияССубконто.Сумма,
	|	ХозрасчетныйДвиженияССубконто.СуммаНУДт,
	|	ХозрасчетныйДвиженияССубконто.СуммаНУКт,
	|	ХозрасчетныйДвиженияССубконто.СчетКт,
	|	ХозрасчетныйДвиженияССубконто.СубконтоКт1,
	|	ПервоначальныеСведенияОСБухгалтерскийУчет.ОсновноеСредство,
	|	ПервоначальныеСведенияОСБухгалтерскийУчет.ПервоначальнаяСтоимость,
	|	ПервоначальныеСведенияОСБухгалтерскийУчет.Период КАК Период1
	|ИЗ
	|	РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет КАК ПервоначальныеСведенияОСБухгалтерскийУчет
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
	|				&НачалоПериода,
	|				&КонецПериода,
	|				(СчетДт.Код = ""20.01""
	|					ИЛИ СчетДт.Код = ""25""
	|					ИЛИ СчетДт.Код = ""26"")
	|					И СчетКт.Код = ""02.01"",
	|				,
	|				) КАК ХозрасчетныйДвиженияССубконто
	|		ПО ПервоначальныеСведенияОСБухгалтерскийУчет.ОсновноеСредство.Ссылка = ХозрасчетныйДвиженияССубконто.СубконтоКт1.Ссылка
	|ГДЕ
	|	ХозрасчетныйДвиженияССубконто.Период МЕЖДУ &НачалоПериода И &КонецПериода
	|	И ХозрасчетныйДвиженияССубконто.Сумма <> 0");
	Запрос.УстановитьПараметр("НачалоПериода",НачалоГода('20161231000000'));
	Запрос.УстановитьПараметр("КонецПериода",КонецГода('20161231000000'));

	РезультатЗапроса = Запрос.Выполнить().Выбрать();
	a=1;
	Пока РезультатЗапроса.Следующий() Цикл
					
				a = a + 1;
				Лист.Cells(a,1).NumberFormat = "@";
				Лист.Cells(a,1).value = Строка(РезультатЗапроса.Регистратор.УникальныйИдентификатор());				
				Лист.Cells(a,2).NumberFormat = "@";
				Лист.Cells(a,2).value = РезультатЗапроса.Регистратор.Номер;
				Лист.Cells(a,3).NumberFormat = "ДД.ММ.ГГГГ";
				Лист.Cells(a,3).value = РезультатЗапроса.Регистратор.Дата;
				Лист.Cells(a,4).NumberFormat = "@";
				Лист.Cells(a,4).value = Строка(РезультатЗапроса.Регистратор);
				Лист.Cells(a,5).NumberFormat = "@";
				Если (РезультатЗапроса.СчетДт.Код = "20.01") Тогда
					//Лист.Cells(a,5).value = Строка(РезультатЗапроса.СубконтоДт3.Код);
				КонецЕсли;
				Лист.Cells(a,6).NumberFormat = "ДД.ММ.ГГГГ";
				Лист.Cells(a,6).value = НачалоМесяца(РезультатЗапроса.Регистратор.Дата);
				Лист.Cells(a,7).NumberFormat = "@";
				//Лист.Cells(a,7).value = РезультатЗапроса.ОсновноеСредство.УИД;
				Лист.Cells(a,8).NumberFormat = "@";
                Лист.Cells(a,9).NumberFormat = "@";
                Лист.Cells(a,10).NumberFormat = "0,00";
                Лист.Cells(a,10).value = РезультатЗапроса.Сумма;
				Лист.Cells(a,11).NumberFormat = "@";
				Если (РезультатЗапроса.СуммаНУКт > 0) ИЛИ (РезультатЗапроса.СуммаНУДт > 0) Тогда
					Лист.Cells(a,11).value = "Да";
				КонецЕсли;
				Лист.Cells(a,12).NumberFormat = "@";
				Лист.Cells(a,12).value = РезультатЗапроса.СчетДт.Код;
				Лист.Cells(a,14).NumberFormat = "@";
                Лист.Cells(a,14).value = РезультатЗапроса.ОсновноеСредство.НаименованиеПолное;
                Лист.Cells(a,15).NumberFormat = "@";
				Лист.Cells(a,15).value = Строка(РезультатЗапроса.ОсновноеСредство.АмортизационнаяГруппа);
				Лист.Cells(a,16).NumberFormat = "ДД.ММ.ГГГГ";
				Лист.Cells(a,16).value = РезультатЗапроса.Период1;
				Лист.Cells(a,17).NumberFormat = "0,00";
				Лист.Cells(a,17).value = РезультатЗапроса.ПервоначальнаяСтоимость;			
	КонецЦикла;
		
				
		Excel.ScreenUpdating = True;					
		Excel.ActiveWorkbook.Save();
			
	
Excel.quit();			
КонецПроцедуры
Показать
27. 1cBokov 7 20.04.17 11:47 Сейчас в теме
(25)Все сделал как Вы написали все равно пустой записывает и все
28. v3rter 20.04.17 12:35 Сейчас в теме
А так:
Excel.ActiveWorkbook.SaveAs("C:\Documents and Settings\Программист-3\Рабочий стол\111.xlsx",-4143);
29. 1cBokov 7 20.04.17 12:39 Сейчас в теме
(28) Вот что выдал.
Прикрепленные файлы:
30. gradi 5 20.04.17 14:00 Сейчас в теме
(29) надо так
Excel.SaveAs("C:\Documents and Settings\Программист-3\Рабочий стол\111.xlsx",-4143);
31. 1cBokov 7 20.04.17 15:10 Сейчас в теме
(30)Все равно тоже самое выходит
32. v3rter 20.04.17 15:40 Сейчас в теме
Замените Excel.Save на
		Excel.Visible = 1;
		Excel = Неопределено;
перезагрузитесь и выполните. Если не появится окно экселя с несохраненным файлом, проблема в открытии файла, тогда лучше пошагать отладчиком и посмотреть в табло что попадает в переменные.
33. 1cBokov 7 20.04.17 16:24 Сейчас в теме
(32) Появился Окно Екселя, на данных нет.
34. v3rter 20.04.17 17:02 Сейчас в теме
После
    Пока РезультатЗапроса.Следующий() Цикл            
                a = a + 1;
добавьте
Сообщить(a);

Выходят ли в окне служебных сообщений числа 2,3,4,5 и т.д.?
35. 1cBokov 7 20.04.17 17:22 Сейчас в теме
(34) Выходит чистый лист екселя и потм ошибка
Значение не является значением объектного типа (quit)
Excel.quit();
36. v3rter 20.04.17 17:48 Сейчас в теме
Excel.quit(); пока тоже закомментируйте.

У меня подозрение, что у Вас запрос не возвращает данных. Особенно если цифры 2,3,4... не вышли.
37. v3rter 25.04.17 11:58 Сейчас в теме
И чем всё закончилось?
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день