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

1. 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. user712436 21.06.22 14:31 Сейчас в теме
(3) Нумерация листов книги начинается с 1. Общее количество листов можно получить, используя следующую команду:
КоличествоЛистов = Книга.Sheets.Count;

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

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

Для НомерЛиста = 1 По КоличествоЛистов Цикл
Если Книга.Sheets(НомерЛиста).Name = "ИНН" Тогда
////
КонецЕсли;
КонецЦикла;
5. Chernika33 22.06.22 10:46 Сейчас в теме
(4) Попробовала, все равно не получается, что и куда подставить. Не понимаю :( Простите
6. user712436 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. user712436 22.06.22 12:54 Сейчас в теме
(8) Скорее всего ошибка связана с тем, что файл должен находиться на диске сервера (не у вас локально), либо на доступном сетевом ресурсе.
10. Chernika33 23.06.22 09:34 Сейчас в теме
(9) Открыла доступ к папке, с БД на ПК все хорошо стало, но с серверной ошибка сталась :(
11. user712436 23.06.22 10:12 Сейчас в теме
(10) Вы можете проверить существование каталога средствами 1С, например:

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

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

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


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

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

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


Попробовала, путь правильный
20. user712436 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. user712436 23.06.22 13:29 Сейчас в теме
(22) А у вас на сервере приложение Excel установлено? Конечно ошибка должна быть еще в попытке создания сом объекта, но мало ли...
24. Chernika33 23.06.22 13:33 Сейчас в теме
25. user712436 23.06.22 14:49 Сейчас в теме
(24) Даже не знаю чем вам помочь, локально у меня ваш код отработал нормально, на сервере Excel нет - проверить не могу, к сожалению...
26. Chernika33 23.06.22 16:37 Сейчас в теме
(25) Скриншот сервера (С екселем). Все равно спасибо за помощь (. Может кто еще поможет
Прикрепленные файлы:
7. user712436 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 Сейчас в теме
Закрывайте тему, не хочет ексель выгружаться на сервере. В ворде попытаюсь :)
Оставьте свое сообщение
Вакансии
Консультант-аналитик 1С
Москва
зарплата от 120 000 руб. до 190 000 руб.
Полный день

Ведущий аналитик-разработчик 1С
Москва
зарплата от 230 000 руб. до 270 000 руб.
Полный день

1С:Эксперт по производительности
Москва
зарплата от 400 000 руб. до 950 000 руб.
Полный день

Ведущий аналитик 1С (ERP, ЗУП)
Краснодар
зарплата от 150 000 руб.
Полный день

Разработчик 1С
Тверь
зарплата от 150 000 руб. до 250 000 руб.
Полный день