Выгрузка в ексель

1. Chernika33 20.06.22 17:48 Сейчас в теме
Всем здравствуйте помогите пожалуйста.
Продолжаю делать Обработку по расписанию выгрузки из справочника обработок, прошлый вариант начальник забраковал :(.

Дошла до момента, что при создании листа в ексель с названием ИНН организации. Необходимо, что бы осуществлялась проверка названия листа, если лист с ИНН текущей организации существует, то работаем в нем иначе создаем новый. Как все связать не понимаю :(

Поиск необходимого листа и работа с ним
Лист = Книга.WorkSheets(ИНН);




Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт   
	 	
			  // Реализация логики команды
	Если ИдентификаторКоманды = "ВыгрузкаИнформацииПоОбработкам" Тогда

		СсылкаНаОрганизацию = Справочники.Организации.НайтиПоКоду("000000001");  
		ИНН = СсылкаНаОрганизацию.ИНН;		  				  			  

	Попытка
		Excel = Новый COMОбъект("Excel.Application");
		Excel.DisplayAlerts = 0;
		Excel.Visible = 0;
	Исключение
   		Сообщить(ОписаниеОшибки() + " Программа Exсel не установлена"); 
   		Возврат;
	КонецПопытки; 
				
	Книга = Excel.Workbooks.Open("C:\2");	
			
		Лист = Книга.WorkSheets.Add();
		Лист.Name = ИНН;
				
	//Установить значение в ячейку	
	Лист.Cells(1, 1).Value = "Тестовое значение";
	
		Книга.Save();
	Excel.Workbooks.Close();
	Excel.Application.Quit();
		
КонецЕсли;
КонецПроцедуры 	
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. REDnrg 21.06.22 10:29 Сейчас в теме
У Вас есть Книга.Worksheets. Наверняка это коллекция значений, которую можно обойти циклом и сравнить Лист.Name каждого элемента с вашим ИНН? Более того к листу можно обращаться по имени типа
Лист = Книга.WorkSheets(ИмяЛиста);
user705522_constantin_h; +1 Ответить
3. Chernika33 21.06.22 13:19 Сейчас в теме
(2) Я только учусь, так, что простите за глупость. Все равно не получается, что то я не правильно делаю :(

Для каждого Лист Из Книга Цикл
			Если Книга.WorkSheets(ИНН)  Тогда       
				Прервать;
		КонецЕсли;
			
		 Лист = Книга.WorkSheets.Add();
		 Лист.Name = ИНН;
		
		КонецЦикла;
Показать
4. Zevzm 21.06.22 14:31 Сейчас в теме
(3) Нумерация листов книги начинается с 1. Общее количество листов можно получить, используя следующую команду:
КоличествоЛистов = Книга.Sheets.Count;

Лист можно выбрать по имени листа в книге:
Лист = Книга.WorkSheets(ИмяЛиста);

Имя листа в книге можно получить по номеру:
ИмяЛиста = Книга.Sheets(НомерЛиста).Name;

Для НомерЛиста = 1 По КоличествоЛистов Цикл
Если Книга.Sheets(НомерЛиста).Name = "ИНН" Тогда
////
КонецЕсли;
КонецЦикла;
5. Chernika33 22.06.22 10:46 Сейчас в теме
(4) Попробовала, все равно не получается, что и куда подставить. Не понимаю :( Простите
6. Zevzm 22.06.22 10:55 Сейчас в теме
(5) Нам нужно создать лист с ИНН = 0123456789:

ИНН = "0123456789":
ЛистСуществует = Ложь;
КоличествоЛистов = Книга.Sheets.Count;
Для НомерЛиста = 1 По КоличествоЛистов Цикл
Если Книга.Sheets(НомерЛиста).Name = ИНН Тогда
ЛистСуществует = Истина;
КонецЕсли;
КонецЦикла;

Если Не ЛистСуществует Тогда
Лист = Книга.WorkSheets.Add();
Лист.Name = ИНН;
КонецЕсли;
8. Chernika33 22.06.22 12:15 Сейчас в теме
(6) Огромное спасибо разобралась, все работает :)
Но вышла новая ошибка. На БД установленной на ПК код отрабатывается без ошибок, но на БД на сервере вылетает ошибка
Прикрепленные файлы:
9. Zevzm 22.06.22 12:54 Сейчас в теме
(8) Скорее всего ошибка связана с тем, что файл должен находиться на диске сервера (не у вас локально), либо на доступном сетевом ресурсе.
10. Chernika33 23.06.22 09:34 Сейчас в теме
(9) Открыла доступ к папке, с БД на ПК все хорошо стало, но с серверной ошибка сталась :(
11. Zevzm 23.06.22 10:12 Сейчас в теме
(10) Вы можете проверить существование каталога средствами 1С, например:

КаталогНаДиске = Новый Файл(ИмяКаталога);
Если КаталогНаДиске.Существует() Тогда...

Попробуйте добраться до своего каталога из интерфейса, через Файл-Открыть.
12. Chernika33 23.06.22 10:22 Сейчас в теме
(11) Не пускает, но доступ то открыт к папке. скриншот ниже
Прикрепленные файлы:
13. Zevzm 23.06.22 10:35 Сейчас в теме
(12) Могу еще предложить сделать выбор файла интерактивно из обработки. Создайте у обработки текстовый реквизит "ИмяФайла", поместите его на форму и назначьте ему обработчик "НачалоВыбора":

&НаКлиенте
Процедура ИмяФайлаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	ДиалогВыбора.Заголовок = "Выберите файл";
	
	Если ДиалогВыбора.Выбрать() Тогда
		Объект.ИмяФайла = ДиалогВыбора.ПолноеИмяФайла;
	КонецЕсли;
КонецПроцедуры
Показать


В отладчике посмотрите значение "Объект.ИмяФайла".
14. Chernika33 23.06.22 10:39 Сейчас в теме
(13) Изменила предыдущее сообщение.
16. Zevzm 23.06.22 11:10 Сейчас в теме
(14) Не может ли быть ситуации, что с этим файлом кто-то работает в данный момент или он открыт у вас из другого места, в терминале к примеру? Проверьте в диспетчере задач запущенные процессы excel, часто бывает так что во время отладки открывается много раз файл и не закрывается корректно, эти процессы висят, но вы их не видите.
Не совсем уже понимаю, у вас файл интерактивно через Файл-Открыть тоже не доступен? Просто на сервере через проводник у вас он доступен?
17. Chernika33 23.06.22 11:26 Сейчас в теме
(16) через 1с он уже открывается, (файл-открыть)

В диспетчере задач нету, также я удалила его и заново создала для лучшей уверенности.

С файловой БД установленной на ПК, все же работает. Может быть дело не в доступе
18. Zevzm 23.06.22 11:29 Сейчас в теме
(17) Вариант с диалогом выбора файла не пробовали? Путь пишите вручную?
19. Chernika33 23.06.22 11:34 Сейчас в теме
(18) Вы извините, что я не с первого раза понимаю, что вы пишите :))


Попробовала, путь правильный
20. Zevzm 23.06.22 12:09 Сейчас в теме
(19) У вас же есть доступ к тому компьютеру на котором находится сетевая папка? Откройте там Управление компьютером - Общие папки - Открытые файлы, и проверьте кем в данный момент занят ваш файл.
(19)
21. Chernika33 23.06.22 12:18 Сейчас в теме
(20) Никем
Прикрепленные файлы:
22. Chernika33 23.06.22 13:25 Сейчас в теме
(21) Проблема я так понимаю в создании экселя, txt и xml попробовала, все создается нормально
23. Zevzm 23.06.22 13:29 Сейчас в теме
(22) А у вас на сервере приложение Excel установлено? Конечно ошибка должна быть еще в попытке создания сом объекта, но мало ли...
24. Chernika33 23.06.22 13:33 Сейчас в теме
25. Zevzm 23.06.22 14:49 Сейчас в теме
(24) Даже не знаю чем вам помочь, локально у меня ваш код отработал нормально, на сервере Excel нет - проверить не могу, к сожалению...
26. Chernika33 23.06.22 16:37 Сейчас в теме
(25) Скриншот сервера (С екселем). Все равно спасибо за помощь (. Может кто еще поможет
Прикрепленные файлы:
7. Zevzm 22.06.22 11:02 Сейчас в теме
Вы также можете попытаться создавать листы через Попытку, эксель должен выдавать ошибку если лист уже существует, в vba есть реализация функции по проверке наличия листа таким способом, т.е. примерно так (может сработать, но это догадки):
Попытка
Лист = Книга.WorkSheets.Add();
Лист.Name = ИНН;
Исключение
Сообщить(ОписаниеОшибки() + СтрШаблон("Лист с наименованием %1 уже существует", ИНН));
КонецПопытки;
15. Chernika33 23.06.22 11:00 Сейчас в теме
(13) В первый раз открыла доступ только к папке, по неопытности подумала, что и ко всему внутри нее, оказалось нет. Теперь открыла доступ к файлу ексель, теперь через файл открыть открывает его, но при выполнении обработки ошибка осталась :(
27. SlavaKron 23.06.22 20:37 Сейчас в теме
Возможно, завис процесс EXCEL.EXE, открывший файл. Перед запуском обработки убейте все процессы EXCEL. Либо ком-объект получайте по имени файла, тогда получите доступ к уже запущенному процессу.
28. Chernika33 27.06.22 17:27 Сейчас в теме
Закрывайте тему, не хочет ексель выгружаться на сервере. В ворде попытаюсь :)
Оставьте свое сообщение

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