Уведомления
Очистить все

Получить диски компьютера в 1С8

3 Записи
1 Пользователи
0 Likes
4,686 Просмотры
65-150 Okolokompa Форум
(@kalininalex)
Reputable Member
Присоединился: 4 года назад
Записи: 160
Создатель темы  

Получаем список дисков в 1С.

Рассмотрим 3 способа.

Способ 1

Функция ПолучитьСписокДисковСпособ1()
	
	РезультатМассив = Новый Массив;
	СтрокаОтвета 	= "ok";
	
	СтруктураРезультатаФункции = Новый Структура();
	СтруктураРезультатаФункции.Вставить("Выполнено", 	Истина);
	СтруктураРезультатаФункции.Вставить("Результат", 	РезультатМассив);
	СтруктураРезультатаФункции.Вставить("Ответ", 		СтрокаОтвета);
	
	Попытка
		FSO = Новый COMОбъект("Scripting.FileSystemObject"); 
		// Выборка объектов из коллекции Drives
		Для каждого Диск Из FSO.Drives Цикл
			// Диск.DriveLetter - буква диска
			Стр = Диск.DriveLetter;
			// Диск.DriveType = 1 - Flash накопитель
			// Диск.DriveType = 2 - Локальный жесткий диск
			// Диск.DriveType = 3 - Сетевой диск
			// Диск.DriveType = 4 - CD/DVD дисковод
			Если Диск.DriveType = 3 Тогда  // если это сетевой диск, то укажем сетевой путь
				//Стр = Стр + " - " + Диск.ShareName;
				РезультатМассив.Добавить(Стр);
			ИначеЕсли Диск.IsReady Тогда
				//Стр = Стр + " - " + Диск.VolumeName;
				РезультатМассив.Добавить(Стр);
			Иначе
				//Стр = Стр + " - [Диск не найден]";
				РезультатМассив.Добавить(Стр);
			КонецЕсли;  
			
		КонецЦикла;
	Исключение
		СтрокаОтвета = ОписаниеОшибки();	
	КонецПопытки;
	
	СтруктураРезультатаФункции.Выполнено 	= РезультатМассив.Количество() > 0; 
	СтруктураРезультатаФункции.Ответ 	= СтрокаОтвета;
	СтруктураРезультатаФункции.Результат 	= РезультатМассив;
	
	Возврат СтруктураРезультатаФункции;
	
КонецФункции

   
Цитата
65-150 Okolokompa Форум
(@kalininalex)
Reputable Member
Присоединился: 4 года назад
Записи: 160
Создатель темы  

Способ 2

Функция ПолучитьСписокДисковСпособ2()
	
	РезультатМассив = Новый Массив;
	СтрокаОтвета 	= "ok";
	
	СтруктураРезультатаФункции = Новый Структура();
	СтруктураРезультатаФункции.Вставить("Выполнено", 	Истина);
	СтруктураРезультатаФункции.Вставить("Результат", 	РезультатМассив);
	СтруктураРезультатаФункции.Вставить("Ответ", 		СтрокаОтвета);
	
	БылаОшибка = Ложь;
	
	Попытка
		ServicesSet = ПолучитьCOMОбъект("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2");
		СписокДисков = ServicesSet.ExecQuery("Select Name,VolumeName,VolumeSerialNumber from Win32_LogicalDisk");			
	Исключение 
		БылаОшибка 		= Истина;
		СтрокаОтвета 	= ОписаниеОшибки();                                                            		
	КонецПопытки; 
	
	Если БылаОшибка = Ложь Тогда			
		Если СписокДисков.Count > 0 Тогда
			Для Каждого ТекДиск Из СписокДисков Цикл        
				РезультатМассив.Добавить(ТекДиск.Name);
			КонецЦикла;		
		КонецЕсли;		
	КонецЕсли;
	
	СтруктураРезультатаФункции.Выполнено 	= РезультатМассив.Количество() > 0; 
	СтруктураРезультатаФункции.Ответ 	= СтрокаОтвета;
	СтруктураРезультатаФункции.Результат 	= РезультатМассив;
	
	Возврат СтруктураРезультатаФункции;
	
КонецФункции

   
ОтветитьЦитата
65-150 Okolokompa Форум
(@kalininalex)
Reputable Member
Присоединился: 4 года назад
Записи: 160
Создатель темы  

Способ 3

Функция ПолучитьСписокДисковСпособ3()
	
	РезультатМассив = Новый Массив;
	СтрокаОтвета 	= "ok";
	
	СтруктураРезультатаФункции = Новый Структура();
	СтруктураРезультатаФункции.Вставить("Выполнено", 	Истина);
	СтруктураРезультатаФункции.Вставить("Результат", 	РезультатМассив);
	СтруктураРезультатаФункции.Вставить("Ответ", 		СтрокаОтвета); 
	
	БылаОшибка = Ложь;
	
	Попытка
		Locator = Новый COMОбъект("WbemScripting.SWbemLocator");
		
		ServicesSet = Locator.ConnectServer(".");
		//Извлечение экземпляров класса Win32_LogicalDisk
		ObjectSet = ServicesSet.InstancesOf("Win32_LogicalDisk");
		
	Исключение 
		БылаОшибка 		= Истина;
		СтрокаОтвета 	= ОписаниеОшибки();                                                            		
	КонецПопытки; 
	
	Если БылаОшибка = Ложь Тогда		
		
		Для Каждого Item Из ObjectSet Цикл
			//Сообщить("Имя: " + Item.Caption);
			//Сообщить("Описание: " + Item.Description); // здесь выводится тип диска
			//Сообщить("Файловая система: " + Item.FileSystem);
			//Сообщить("Свободное место: " + Item.FreeSpace);
			//Сообщить("Метка диска: " + Item.VolumeName);
			//Сообщить ("=======================");
			
			РезультатМассив.Добавить(Item.Caption);
		КонецЦикла;	
	КонецЕсли;
	
	СтруктураРезультатаФункции.Выполнено 	= РезультатМассив.Количество() > 0; 
	СтруктураРезультатаФункции.Ответ 	= СтрокаОтвета;
	СтруктураРезультатаФункции.Результат 	= РезультатМассив;
	
	Возврат СтруктураРезультатаФункции;
	
КонецФункции

   
ОтветитьЦитата
Поделиться: