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

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 Сейчас в теме
И чем всё закончилось?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот