Пример обращения к программе 1С:Предприятие из модуля MS Excel В данном примере запускается и инициализируется конфигурация 1С:Предприятие 8.0 с базой данных в каталоге D:\1CBasa.
Далее в программе 1С:Предприятие 8.0 создается объект типа "СправочникМенеджер.Товары" и создается новая группа элементов с названием "***** Экспорт из Excel ******".
Во вновь созданную группу каталога записываются данные из таблицы MS Excel.
Пример представлен на языке MS Visual Basic:
Код VBS Sub Excel_to_trade()
Dim trade As Object
Dim Элемент As Object
Set trade = CreateObject("V8.Application")
trade.Connect("File=""D:\1CBasa"";Usr=""Director"";")
Set СправочникТоваров = trade.Справочники. Товары
Set ГруппаТоваров = СправочникТоваров.СоздатьГруппу()
ГруппаТоваров.Наименование = "***** Экспорт из Excel ******"
ГруппаТоваров.Записать
N = 100 'Количество строк в документе
For Count = 1 To N
Set Элемент = СправочникТоваров.СоздатьЭлемент()
Элемент.Наименование = Application.Cells(Count, 2).Value
Элемент.Розн_Цена = Application.Cells(Count, 3).Value
Элемент.Мел_Опт_Цена = Application.Cells(Count, 4).Value
Элемент.Опт_Цена = Application.Cells(Count, 5).Value
Элемент.Родитель = ГруппаТоваров.Ссылка
Элемент.Записать
Next Count
End Sub
Категория:
Работа с Microsoft Office и OpenOffice Запись СД из 1С(без ВК и других программ, проверено на ХР/2003) Код 1C v 7.x
Процедура Сформировать(ДискДляЗаписи="E:\",АвтоИзвлечениеСД=0,АвтоЗакрытиеМастера=1)
Перем Имя,Каталог;
scr=СоздатьОбъект("MSScriptControl.ScriptControl");
scr.language="javascript";
shell=СоздатьОбъект("Shell.Application");
scr.AddObject("Shell",shell);
ИмяСлужбы="ImapiService";
Если Shell.CanStartStopService(ИмяСлужбы)=0 Тогда
Предупреждение("Вам недозволено записывать диски СД!",5);
Возврат;
КонецЕсли;
scr.Eval("Shell.ServiceStart('"+ИмяСлужбы+"',true)");
РасположениеФайла(Каталог,Имя);
Если ФС.ВыбратьФайл(0,Имя,Каталог,"Выбирите файл для записи","Все файлы|*.*","*")=0 Тогда
Возврат;
КонецЕсли;
fso=СоздатьОбъект("Scripting.FileSystemObject");
wshshell=СоздатьОбъект("WScript.Shell");
КаталогДляЗаписи=wshshell.regread("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\CD Burning");
fso.CopyFile(Каталог+Имя,КаталогДляЗаписи+"\"+Имя,-1);
ДискДляЗаписиNS=shell.NameSpace(ДискДляЗаписи);
wshshell.regwrite("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\CD Burning\Auto Eject",АвтоИзвлечениеСД,"REG_DWORD");
wshshell.regwrite("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\CD Burning\Auto Close",АвтоЗакрытиеМастера,"REG_DWORD");
scr.AddObject("Verbs",ДискДляЗаписиNS.items().item().verbs());
e=scr.Eval("new Enumerator(Verbs)");
Пока e.atEnd(0)=0 Цикл
Если Найти(Нрег(e.item(0).name),"записать файлы на компакт-диск")>0 Тогда
e.item(0).doit();
Пока wshshell.appactivate("Мастер записи компакт-дисков")=0 Цикл
КонецЦикла;
wshshell.sendkeys("{ENTER}")
КонецЕсли;
e.moveNext (0);
КонецЦикла;
Пока wshshell.appactivate("Мастер записи компакт-дисков")=-1 Цикл
ВвестиСтроку("","Пауза",1,0,1);
КонецЦикла;
КонецПроцедуры
Конечно метод дубовенький, расчитан тока на русскую версию, но можно и допеределать.
Не стал писать код определения пишущего сидирома и возможности записи (хотя на отсутствие диска или невозможность записать ОС сама укажет)...
Автор:
smaharbA
А через Nero можно записать так:
Код DOS Batch File
"C:\Program Files\Ahead\Nero\NeroCmd.exe" --no_user_interaction --write --real --iso Archive_1C --drivename M --force_erase_cdrw --dvd --dvd_high_compatibility --close_session --verify E:\Full_Archive_1C\*.* >H:\BackUp\Log\write.log
Категория:
Полезные, Универсальные Функции Скрипт принудительного завершения процессов 1С на всех компьютерах В примере "1cv7s.exe", для 8-ки замениете на "1cv8.exe"
Код VBS
'Скрипт демонстрирует возможность принудительного завершения процессов 1С
'на всех компьютерахуказанного домена. Данный код можно применять непосредственно перед пакетным запуском 1С:Предприятия,
'требующим монопольного входа в базу данных (например, при резервном копировании).
'ВНИМАНИЕ! Задайте нужное значение переменной "DomainName"!
'ВНИМАНИЕ! Для успешной работы скрипта его желательно запускать с правами администратора домена.
'ВНИМАНИЕ! Чтобы опробовать скрипт, не производя деструктивных действий, достаточно закомментировать
'оператор "Proc.Terminate".
Option Explicit
On Error Resume Next
Dim DomainName 'Имя домена
DomainName = "MYDOMAIN"
Dim StrResult 'строка результата работы всей программы
StrResult = StrResult & CStr(Now) & " начало работы скрипта" & VbCrLf
Dim ADSI
Set ADSI = GetObject("WinNT://" & DomainName)
ADSI.Filter = Array("computer")
Dim Comp 'компьютер
Dim WMI 'объект WMI
Dim Proc 'процесс
Dim CurrName 'имя текущего компьютера
CurrName = GetNameComp()
'Цикл по компьютерам домена
For Each Comp In ADSI
If Comp.Name <> CurrName Then
Set WMI = GetObject("winmgmts:{ImpersonationLevel=Impersonate}!\\" & Trim(Comp.Name) & "\Root\CIMV2")
If Err.Number=0 Then
'Цикл по процессам компьютера
For Each Proc In WMI.ExecQuery("S_elect * FROM Win32_Process WHERE Name = '1cv7s.exe'")
StrResult = StrResult & _
CStr(Now) & " Computer=" & Comp.Name & " PID=" & Proc.ProcessId & _
VbCrLf
'Завершение процесса
Proc.Terminate
Next 'Цикл по процессам компьютера
Else 'Не удалось соединиться с компьютером
If Err.Number <> 462 Then 'The remote server machine does not exist or is unavailable
StrResult = StrResult & _
" " & CStr(Now) & " Computer=" & Comp.Name & " ERROR " & Err.Number & _
VbCrLf
End If
End If
Err.Clear
End If
Next 'Цикл по компьютерам домена
StrResult = StrResult & CStr(Now) & " конец работы скрипта" & VbCrLf
'Отображение результата
ShowInNotepad("Процессы 1cv7s.exe:" & VbCrLf & VbCrLf & StrResult)
'==========================================================================
'Процедура отображает переданную строку в блокноте
Sub ShowInNotepad(StrToFile)
Dim FSO 'Объект файловой системы Scripting.FileSystemObject
Dim TempPath 'Путь к временному файлу
Dim TxtFile 'Поток текстового файла
Set FSO = CreateObject("Scripting.FileSystemObject")
TempPath = GetTempPath() & "\" & FSO.GetTempName
Set TxtFile = FSO.CreateTextFile(TempPath)
TxtFile.WriteLine(StrToFile)
TxtFile.Close
CreateObject("WScript.Shell").Run "notepad.exe " & TempPath
WScript.Sleep 1000
FSO.DeleteFile TempPath
End Sub 'ShowInNotepad
'==========================================================================
'Функция возвращает путь к каталогу временных файлов текущего пользователя
Function GetTempPath()
GetTempPath = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TEMP%")
End Function 'GetTempPath
'==========================================================================
'Функция возвращает имя текущего компьютера
Function GetNameComp()
GetNameComp = CreateObject("WScript.Network").ComputerName
End Function 'GetNameComp
Категория:
Администрирование Получить статус сетевой карты(устройства), Работает или уже нет Код 1C v 7.x // Глобальная переменная в которой будем хранить
// известные нам типы статусов сетевой карты
перем сзТипСтатуса;
// Глобальная переменая
перем обШелл;
//*******************************************
// стрСтатусАдаптера(стрИмя = "")
//
// Параметры:
// стрИмя - Строка. Имя сетевой статус которой надо определить.
// В том виде как показа в сетвых подключениях.
//
// Возвращаемое значение:
// Строка. Статус заданой сетевой.
//
// Описание:
// Функция определяет статус сетевой.
//
функция стрСтатусАдаптера(стрИмя = "")
Ответ = "";
// Попытаемся получить статус через контрол скриптов
попытка
сзСтевые = создатьобъект("списокзначений");
// Выполняем скрипт. Из полученного значения пытаемся
// сформировать список значений
сзСтевые = значениеизстроки(обШелл.Run("strGetAdapterInfo"));
исключение
// По каким-то причинам выполнить скрипт не удалось
Ответ = "Статус установить не удалось";
конецпопытки;
// Если в возращаемом значение пустая строка, то скрипт
// выполнился. Можно смотреть дальше.
если Ответ = "" тогда
// Получаем индекс статуса сетевой.
стрСтатус = строка(сзСтевые.Получить(стрИмя));
// Проверяем на пустое значение индекса.
если пустоезначение(стрСтатус) = 1 тогда
// Если индекс пуст, то сетевая суказанным именем отсуствует
Ответ = "Сетевая с таким именем отсуствует";
иначе
// Ищем индекс статуса в известных нам типов статуса.
чисПозиция = сзТипСтатуса.НайтиЗначение(стрСтатус);
если чисПозиция = 0 тогда
// Не нашли. Смотрим MSDN
Ответ = "Не известный тип статуса сетевой";
иначе
// Получаем строковое представление статуса.
сзТипСтатуса.ПолучитьЗначение(чисПозиция, Ответ);
конецесли;
конецесли;
конецесли;
// Возвращаем полученный статус
возврат Ответ;
конецфункции;
//*******************************************
// Этот блок обязателен.
// Необходимо что бы он отработал до первого вызова
// функции стрСтатусАдаптера
//*******************************************
// Создаем объект для управления скриптами
обШелл = создатьобъект("MSScriptControl.ScriptControl");
// Устанавливаем рабочий язык для выполнения скриптов
обШелл.Language = "VBScript";
// Сам срипт который соберет статусы всех сетевых устройств
тхтКод = "
|function strGetAdapterInfo()
| dim objNetworkAdapter
| Answer = ""{""""СписокЗначений"""",{""
| set objWMI = getobject(""WinMgmts:\\.\Root\CIMV2"")
| set objNetworkAdapters = objWMI.ExecQuery(""S_elect * FROM Win32_NetworkAdapter"", , 48)
| for each objNetworkAdapter in objNetworkAdapters
| Answer = Answer & ""{{""""Строка"""","""""" & objNetworkAdapter.NetConnectionStatus &_
| """"""}, """""" & objNetworkAdapter.NetConnectionID & """""",""""0""""}""
|
| next
| Answer = Answer & ""}}""
| strGetAdapterInfo = Answer
| end function";
// Добавим наш скрипт в котрол скриптов
обШелл.AddCode(тхтКод);
// Создадим список значений в который поместим все известные нам
// виды статуса сетевых устройств.
сзТипСтатуса = создатьобъект("списокзначений");
// Поместим в список значений виды статусов их строковое представление
сзТипСтатуса.ДобавитьЗначение("0", "Отключенно");
сзТипСтатуса.ДобавитьЗначение("1", "Подключение");
сзТипСтатуса.ДобавитьЗначение("2", "Подключено");
сзТипСтатуса.ДобавитьЗначение("3", "Отключение");
сзТипСтатуса.ДобавитьЗначение("4", "Устройство не представленно");
сзТипСтатуса.ДобавитьЗначение("5", "Устройство отключено");
сзТипСтатуса.ДобавитьЗначение("6", "Устройство не исправно");
сзТипСтатуса.ДобавитьЗначение("7", "Соединение разорвано");
сзТипСтатуса.ДобавитьЗначение("8", "Аутентификация");
сзТипСтатуса.ДобавитьЗначение("9", "Аутентификация прошла успешно");
сзТипСтатуса.ДобавитьЗначение("10", "Аутентификация не прошла");
сзТипСтатуса.ДобавитьЗначение("11", "Неправильный адресс");
сзТипСтатуса.ДобавитьЗначение("12", "Требуется полномочия");
IUnknown Категория:
COM-объекты, WMI, WSH Экспорт печатных форм и любых данных из 1С в BMP, JPEG, PCX, PDF, PNG и TIFF. Оптимальным решением является установка
Bullzip PDF Printer . После установки в системе появляется виртуальный принтер, с помощью которого можно "печатать" в файл pdf из любого приложения. Программа бесплатная, работает в терминале и имеет поддержку русского языка.
После установки, можно печатать напрямую используя код:
Код 1C v 8.х
//Таб - ТабличныйДокумент
//ИмяФайла – путь для сохранения файла PDF (например «D:\Torg12.pdf»)
Процедура СоздатьФайлПДФ(Таб, ИмяФайла)
Попытка
ПДФПринтер = Новый ComObject(«Bullzip.PDFPrinterSettings»);
ПДФПринтер.SetValue(«output», ИмяФайла);
ПДФПринтер.SetValue(«ShowSaveAS», «never»);
ПДФПринтер.SetValue(«ShowProgress», «no»);
ПДФПринтер.SetValue(«ShowProgressFinished», «no»);
ПДФПринтер.SetValue(«ShowSettings», «never»);
ПДФПринтер.SetValue(«ShowPDF», «no»);
ПДФПринтер.SetValue(«ConfirmOverwrite»,»no»);
ПДФПринтер.WriteSettings();
Таб.Автомасштаб = Истина;
Таб.ИмяПринтера = «Bullzip PDF Printer»;Таб.Напечатать(Истина);
PDFФайл = Новый Файл(ИмяФайла);
Пока НЕ PDFФайл.Существует() Цикл
ОбработкаПрерыванияПользователя();
КонецЦикла;
Исключение
Сообщить(ОписаниеОшибки());
Сообщить(«Скорее всего необходимо установить или переустановить «»Bullzip PDF Printer»);
КонецПопытки;
//устанавливаем принтер по умолчанию
Таб.ИмяПринтера = ПолучитьПринтерПоУмолчанию();
КонецПроцедуры
Здесь функция
ПолучитьПринтерПоУмолчанию() нужна для того чтобы вернуть печатной форме принтер по умолчанию, т.к. если напечатать без предварительного просмотра то печать пойдет на виртуальный PDF принтер BullzipPDFPrinter.
Код 1C v 8.х //получаем принтер по умолчанию
Функция ПолучитьПринтерПоУмолчанию()
Скрипт = Новый ComObject(«MSScriptControl.ScriptControl»);
Скрипт.Language = «vbscript»;
Скрипт.AddCode(»
|Function GetDefaultPrinter()
|GetDefaultPrinter=vbNullString
|Set objWMIService=GetObject(«»winmgmts:»" _
|& «»{impersonationLevel=impersonate}!\\.\root\cimv2″»)
|Set colInstalledPrinters=objWMIService.ExecQuery _
|(«»S_elect * from Win32_Printer»")
|For Each objPrinter in colInstalledPrinters
|If objPrinter.Attributes and 4 Then
|GetDefaultPrinter=objPrinter.Name
|Exit For
|End If
|Next
|End Function»);
Возврат СокрЛП(Скрипт.run(«GetDefaultPrinter»));
КонецФункции
Печать в PDF используя bioPDF Категория:
Администрирование Запрос к базе данных SQL Код 1C v 8.х Функция ПодключитьCOMОбъект(Путь) Экспорт
Отказ = Ложь;
COMСоединение = Новый COMОбъект("ADODB.Connection");
COMСоединение.ConnectionString = ".....";
COMСоединение.ConnectionTimeOut = 1200;
COMСоединение.CursorLocation = 3;
Попытка
COMСоединение.Open(COMСоединение.ConnectionString);
Исключение
Отказ = Истина;
COMСоединение = "";
Предупреждение("Невозможно установить соединение - " + ОписаниеОшибки());
Возврат НЕ Отказ;
КонецПопытки;
Возврат НЕ Отказ;
КонецФункции
Процедура КнопкаВыплонитьНажатие(Кнопка)
Если НЕ ПодключитьCOMОбъект(ПутьКФайлуГДБ) Тогда
ЗакрытьФормуИндикатора();
Возврат;
КонецЕсли;
КомандаАДО = Новый COMОбъект("ADODB.Command");
ТекстЗапроса = "S_elect id from nomenclature where ext_1c_id = 1";
Рекордсет = Новый COMОбъект("ADODB.Recordset");
Попытка
Рекордсет = КомандаАДО.Execute();
Исключение
Предупреждение("Не получилось выполнить запрос!" + " - " + ОписаниеОшибки());
КонецПопытки;
Рекордсет.MoveFirst();
Пока Рекордсет.EOF() = 0 Цикл
ОбработкаПрерыванияПользователя();
айди = Рекордсет.Fields("id").Value;
Сообщить(айди);
КонецЦикла;
КонецПроцедуры
еще пример:
Код 1C v 8.х стрПодключения = "Driver={SQL Server};"
стрПодключения = стрПодключения + ИмяСервера + ";";
стрПодключения = стрПодключения +"Uid=" + ИмяПользователя + ";";
стрПодключения = стрПодключения + "Pwd=" + Пароль + ";";
стрПодключения = стрПодключения + "DataBase =" + ИмяБазы + ";";
стрПодключения = стрПодключения + "Pwd=" + Пароль + ";";
Connection = Новый COMОбъект("ADODB.Connection");
Connection.OpenServer = стрПодключения;
RS = Новый COMОбъект("ADODB.Recordset");
// Запрос к базе на языке SQL запросов.
RS.Open("S_elect * from TradeUnit", Connection);
Пока RS.EOF() = 0 Цикл
// Можно обращаться и обрабатывать значения полей выборки.
ИД = RS.Fields("ID").Value;
Код = RS.Fields("Code").Value;
// Обработка других полей
RS.MoveNext ();
КонецЦикла;
RS.Close();
Connection.Close();
Категория:
COM-объекты, WMI, WSH Подключение к 1С из JavaScript Код //Подключается делает выборку прогоняет по циклу количество записей соответствует истине
function dataload()
{
var v8=new ActiveXObject("V81.COMConnector");
path='d:\\';
db='baza';
user='admin';
password='141004';
conn = v8.Connect("File='"+path+"';Ref='"+db+"';Usr='"+user+"';Pwd='"+password+"';");
tab = conn.Справочники.Клиенты;
query = conn.NewObject("Запрос");
query.text = 'ВЫБРАТЬ ПРЕДСТАВЛЕНИЕ(Клиенты.Статус) КАК КлиентыПоСтатусу, КОЛИЧЕСТВО(Клиенты.Ссылка) КАК Количество ИЗ Справочник.Клиенты КАК Клиенты СГРУППИРОВАТЬ ПО Клиенты.Статус';
Qresult = query.execute().Choose();
strdat=''; n=1;
while (Qresult.next ())
{
strdat+=n+"). "+Qresult.КлиентыПоСтатусу+"<br>"; n++;
}
document.getElementById("message").innerHTML=strdat;
Категория:
COM-объекты, WMI, WSH Пример подключения к MySQL базе Код 1C v 8.х // Пример 1
Сервер="IP-адрес-сайта"; // IP адрес сайта
ПользовательСервера="имя-пользователя-базы-данных"; // имя пользователя базы данных
ПарольСервера="пароль-пользователя-базы-данных"; // пароль пользователя базы данных
БазаСервера="название-SQL-базы-данных"; // название SQL базы данных
Соединение = Новый COMОбъект("ADODB.Connection");
Соединение_param = "driver={MySQL ODBC 5.1 Driver}; server="+СокрЛП(Сервер)+"; uid="+СокрЛП(ПользовательСервера)+"; pwd="+СокрЛП(ПарольСервера)+"; database="+СокрЛП(БазаСервера)+"; STMT=SET CHARACTER SET utf8";
Try
Соединение.open(Соединение_param);
СоединениеУстановлено = Истина;
Сообщить("Соединение установлено");
Except
ТекстСообщения = ""+ТекущаяДата()+" Connection error: "+ОписаниеОшибки();
Сообщить(ТекстСообщения);
СоединениеУстановлено = Ложь;
return;
EndTry;
Код 1C v 8.х ]// Пример 2
Соединение = Новый COMОбъект("ADODB.Connection");
ConnectionString = "driver={SQL Server}; server=; uid=; Pwd=; Database = "; // это для MS SQL строка
Попытка
Соединение.Open(ConnectionString);
Сообщить("Соединение осуществлено в "+ТекущаяДата());
Исключение
Предупреждение("Невозможно установить соединение");
Возврат;
КонецПопытки;
ТекстЗакпроса = "....................";
НаборЗаписей = Новый COMОбъект("ADODB.RecordSet");
НаборЗаписей.ActiveConnection = Соединение;
НаборЗаписей.Open(ТекстЗапроса);
Пока не НаборЗаписей.Eof() Цикл
// ............код обработки.....................
НаборЗаписей.MoveNext ();
КонецЦикла;
НаборЗаписей.Close();
Соединение.Close();
Сообщить("Обработка завершена в "+ТекущаяДата());
Код 1C v 7.x DB = СоздатьОбъект("ODBCDatabase");
DB.Соединение("DRIVER={MySQL ODBC 5.1 Driver}; SERVER=IP_Супер_мега_сервера; DATABASE=Мега_база; USER=Супер_юзер; PASSWORD=пароль_супер_мега_юзера; OPTION=3;");
RS = СоздатьОбъект("ODBCRecordSet");
RS.SetDatabase(DB);
Если RS.Выполнить("set names cp1251") = 0 Тогда
Сообщить("Ошибка подключения к MySQL" + РазделительСтрок + RS.ПолучитьОписаниеОшибки());
СтатусВозврата(0);
Возврат;
КонецЕсли;
Используя DSN . Большой плюс dsn есть режим проверки и также в текстах 1с
уже не нужен пользователь и пароль. Все детали скрыты в dsn
вот мой успешно работающий код для MY SQL
Код 1C v 7.x sql = СоздатьОбъект("ODBCDatabase");
Имя0 = "DragNet";
Фл1 = sql.Соединение("DSN=" + Имя0 + ";");
Если Фл1 = 0 Тогда
Сообщить("Не смогли открыть DSN = " + Имя0);
Сообщить("Ошибка = " + sql.ПолучитьОписаниеОшибки() );
Иначе
sql.УстТолькоЧтение(1);
КонецЕсли;
rc = СоздатьОбъект("ODBCRecordSet");
rc.УстБД(sql);
еще, драйвер 3.51:
Код 1C v 7.x //Тестируем установку параметров соединения
клМускул = СоздатьОбъект("ODBCDatabase");
клМускул.СтрокаСоединения = "Driver={MySQL ODBC 3.51 Driver};Server=localhost;
|Port=3306;Database=_1c;User=_1c_user; Password=_1c_pass;
|Option=3;";
Результат = клМускул.СтрокаСоединения;
ПроверитьРавенство(Результат,"Driver={MySQL ODBC 3.51 Driver};Server=localhost;
|Port=3306;Database=_1c;User=_1c_user; Password=_1c_pass;
|Option=3;");
Категория:
COM-объекты, WMI, WSH Заполнение табличного поля данными таблицы значений, полученной из SQL - Запроса Код 1C v 8.х Процедура ЗаполнитьНажатие(Элемент)
запрос = СоставитьЗапрос(); //Функция СоставитьЗапрос() возвращает строку запроса
ТаблицаВывода = Новый ТаблицаЗначений;
ТаблицаВывода.Очистить();
ТаблицаВывода = ЗапросКСкуль(CRM_MSSQL_Сервер,CRM_MSSQL_БазаДанных,CRM_MSSQL_Логин,CRM_MSSQL_Пароль,Запрос);
ТабличноеПоле.Очистить();
ЭлементыФормы.ТабличноеПоле.Значение=ТаблицаВывода;
ЭлементыФормы.ТабличноеПоле.СоздатьКолонки();
КонецПроцедуры
Функция ЗапросКСкуль(SQLServer,DSN,Login,Password,txtSQL)
Соединение = Новый COMОбъект("ADODB.Connection");
НаборЗаписей = Новый ComObject("ADODB.RecordSet");
Команда = Новый COMОбъект("ADODB.Command");
Соединение.ConnectionString = ("Provider=SQLOLEDB; Data Source = ") + SQLServer +
(";Initial Catalog=") + DSN + (";UID=") + Login + ("; PWD=") + Password + (";");
Соединение.ConnectionTimeOut = 15;
//Попытка
Соединение.Open();
// Сообщить("Connect");
//Исключение
// Сообщить("No connect");
//КонецПопытки;
Команда.ActiveConnection = Соединение;
Команда.CommandText = txtSQL;
//Попытка
НаборЗаписей = Команда.Execute ();
// Сообщить("Add record");
//Исключение
// Сообщить("No I_nsert");
//КонецПопытки;
Таблица = Новый ТаблицаЗначений;
//Состояние ("Заполнение временной таблицы...");
Для НомерСтолбца = 0 По НаборЗаписей.Fields.Count-1 Цикл //Создание и добавление колонок во временную таблицу
ИмяСтолбца =НаборЗаписей.Fields.Item(НомерСтолбца).Name;
Таблица.Колонки.Добавить(ИмяСтолбца);
//Сообщить(ИмяСтолбца); // Тестовая строка
КонецЦикла;
Пока НЕ НаборЗаписей.EOF Цикл // Заполнение созданной таблицы
НоваяСтрока = Таблица.Добавить();
Для НомерСтолбца = 0 По НаборЗаписей.Fields.Count-1 Цикл
НоваяСтрока.Установить(НомерСтолбца,НаборЗаписей.Fields(НомерСтолбца).Value);
//Сообщить ("Test " + ЗаписиSQL.Fields(НомерСтолбца).Value + ЗаписиSQL.Fields(НомерСтолбца).Name);
КонецЦикла;
НаборЗаписей.MoveNext ();
КонецЦикла;
//Состояние ("Закрываем соединение с SQL...");
Соединение.Close();
Возврат Таблица;
КонецФункции
Код 1C v 8.х Функция ЗапросSQL (SQLServer,Login,Password,ТекстSQL) //Функция выборки данных из SQL сервера и передача во временную таблицу 1С
СтрокаСоединения = ("Provider=SQLOLEDB;Driver={SQL Server}; Deleted=No; Data Source = ") + SQLServer +
(";UID=") + Login + ("; PWD=") + Password + (";");
Подключение = Новый ComObject("ADODB.Connection");
Подключение.ConnectionString=СтрокаСоединения;
Попытка
Подключение.Open(СтрокаСоединения);
Состояние ("Подключение к серверу SQL...");
Исключение
Сообщить(ОписаниеОшибки());
Возврат Ложь;
КонецПопытки;
СоединениеSQL = Новый COMObject("ADODB.Command");
СоединениеSQL.ActiveConnection = Подключение;
СоединениеSQL.NamedParameters = True;
СоединениеSQL.CommandText = ТекстSQL;
СоединениеSQL.CommandType = 1;
//СоединениеSQL.Prepared = Истина;
Param1 = СоединениеSQL.CreateParameter("n",3,1,1,1);
СоединениеSQL.Parameters.Append(Param1);
Param2 = СоединениеSQL.CreateParameter("ДатаПриходаС",200,1,8,Формат(НачалоПериода,"ДФ=ггггММдд"));//Формат(НачалоПериода,"ДФ=ггггММдд"));
СоединениеSQL.Parameters.Append(Param2);
Param3 = СоединениеSQL.CreateParameter("ДатаПриходаПо",200,1,8,Формат(КонецПериода,"ДФ=ггггММдд"));
СоединениеSQL.Parameters.Append(Param3);
СоединениеSQL.Parameters.Refresh();
Состояние ("Выполнение запроса SQL...");
ЗаписиSQL = Новый ComObject("ADODB.RecordSet");
ЗаписиSQL = СоединениеSQL.Execute();
Таблица = Новый ТаблицаЗначений;
Состояние ("Заполнение временной таблицы...");
Для НомерСтолбца = 0 По ЗаписиSQL.Fields.Count-1 Цикл //Создание и добавление колонок во временную таблицу
ИмяСтолбца =ЗаписиSQL.Fields.Item(НомерСтолбца).Name;
Таблица.Колонки.Добавить(ИмяСтолбца);
Сообщить(ИмяСтолбца);
КонецЦикла;
Пока ЗаписиSQL.EOF = 0 Цикл // Заполнение созданной таблицы
НоваяСтрока = Таблица.Добавить();
Для НомерСтолбца = 0 По ЗаписиSQL.Fields.Count-1 Цикл
НоваяСтрока.Установить(НомерСтолбца,ЗаписиSQL.Fields(НомерСтолбца).Value);
Сообщить ("Test " + ЗаписиSQL.Fields(ИмяСтолбца).Value + ИмяСтолбца);
КонецЦикла;
ЗаписиSQL.MoveNext ();
КонецЦикла;
Состояние ("Закрываем соединение с SQL...");
ЗаписиSQL.Close();
Подключение.Close();
Возврат Таблица; // Возврат таблицы значений запроса SQL
КонецФункции
Категория:
COM-объекты, WMI, WSH Получение списка зарегистрированных на текущем компьютере баз 1С Предприятие 1Cv7 Код 1C v 7.x // Процедура получает из реестра список зарегистрированных ИБ 7.7
Процедура ПолучитьСписокИБ()
Попытка
ScrptCtrl=Новый COMObject("MSScriptControl.ScriptControl");
ScrptCtrl.Language="vbscript";
ScrptCtrl.AddCode("
|Function Get1CV77Titles()
| const HKEY_CURRENT_USER = &H80000001
| Set oReg=GetObject(""winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv"")
| strKeyPath = ""Software\1C\1Cv7\7.7\Titles""
| oReg.EnumValues HKEY_CURRENT_USER, strKeyPath, arrValues
| strInfo=vbNullString
| Get1CV77Titles = strInfo
| On Error Resume Next
| For i = LBound(arrValues) To UBound(arrValues)
| call oReg.GetStringValue(HKEY_CURRENT_USER,strKeyPath,arrValues(i),Value)
| strInfo=strInfo & arrValues(i) & vbTab & Value & vbCrLf
| Next
| Get1CV77Titles = strInfo
|End Function
|");
Текст=СокрЛП(ScrptCtrl.Run("Get1CV77Titles"));
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
ТаблицаПути.Очистить();
Если НЕ ЗначениеЗаполнено(Текст) Тогда
Возврат;
КонецЕсли;
Для Ном=1 По СтрЧислоСтрок(Текст) Цикл
СтрБазы=СтрПолучитьСтроку(Текст,Ном);
Разд=Найти(СтрБазы,Символы.Таб);
Путь=Лев(СтрБазы,Разд-1);
Название=Прав(СтрБазы,СтрДлина(СтрБазы)-Разд);
НоваяСтрока = ТаблицаПути.Добавить();
НоваяСтрока.Имя = Название;
НоваяСтрока.Путь = Путь;
КонецЦикла;
ТаблицаПути.Сортировать("Имя");
КонецПроцедуры //ПолучитьСписокИБ
Функция возвращает список значений содержащий список баз установленных на данном компьютаре. В котором в качестве значения указывается путь до базы, а в представлении название базы, так как она отображается в окне выбора баз при запуске 1С. Если баз не обнаруженно то возвращает строку "Error"
Код 1C v 7.x
функция сзПолучитьСписокБаз()
попытка
// Создаем объект Microsoft Script Control.
олеСкрипт = создатьобъект("MSScriptControl.ScriptControl");
// Устанавливаем в качестве языка для выполнения сценариев Visual Basic
олеСкрипт.Language = "VBScript";
// Формируем код на VB.
// В принципе он все делает. Создает объект
// Windows Management Instrumentation и уже через него
// получает значение ключи реестра преобразовывая данные
// в строку.
стрКод =
"function strGetListBase()
| const RootKey = &H80000001
| set Reg = GetObject(""winmgmts:{impersonationLevel=impersonate}!\\."" &_
| ""\root\default:StdRegProv"")
| PathKey = ""Software\1C\1Cv7\7.7\Titles""
| Reg.EnumValues RootKey, PathKey, Arr
| Answer = ""{""""СписокЗначений"""",{""
| for x = LBound(Arr) to UBound(Arr)
| call Reg.GetStringValue(RootKey, PathKey, Arr(x), Value)
| Answer = Answer & ""{{""""Строка"""","""""" &_
| Arr(x) & """"""},"""""" & replace(Value, """""""", """""""""""") &_
| """""",""""0""""}""
| if x <> UBound(Arr) then Answer = Answer & "",""
| next
| Answer = Answer & ""}}""
| strGetListBase = Answer
|end function";
// Добавляем наш код.
олеСкрипт.AddCode(стрКод);
// Вызываем его на выполнение, и пытаемся из полученного результата
// сформировать список значений.
Ответ = значениеизстроки(олеСкрипт.Run("strGetListBase"));
// Отсортируем список по Представлению баз
Ответ.СортироватьПоПредставлению();
исключение
// Если произошла ошибка. Значит вернем "Error".
Ответ = "Error";
конецпопытки;
возврат Ответ;
конецфункции
Еще примеры! Получение списка баз 1С 7.7 из реестра Категория:
Полезные, Универсальные Функции Получение локальных, сетевых, сменных (флешек) дисков компьютера При разработке отчетов или обработок рано или поздно приходится сталкиваться с необходимостью определения имени локального диска, сменного накопителя (флешки), сетевого диска. В данной статье представлены 3 способа получения списка дисков компьютера:
Примеры для 8-ой версии, для того чтобы заработало в 7-ой замените:
Код 1C v 8.х Новый COMОбъект(
на
Код 1C v 7.x СоздатьОбъект(
1-вый способ:
Код 1C v 8.х 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;
Иначе
Стр = Стр + " - [Диск не найден]";
КонецЕсли;
Сообщить(Стр);
КонецЦикла;
2-ой способ:
Код 1C v 8.х
//При помощи скрипта получаем перечень всех дисков компьютера:
Попытка
ScrptCtrl = Новый COMОбъект("MSScriptControl.ScriptControl");
ScrptCtrl.Language="vbscript";
ScrptCtrl.addcode("
|Function GetComputers()
| Set objWMIService = GetObject(""winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2"")
| Set colDisks = objWMIService.ExecQuery (""Select * from Win32_LogicalDisk"")
| For Each objDisk in colDisks
| disk = disk & objDisk.DeviceID & "";"" & objDisk.DriveType& "";""
| Next
| GetComputers = disk
|End Function
|");
Текст=СокрЛП(ScrptCtrl.Run("GetComputers"));
Исключение
Предупреждение(ОписаниеОшибки());
КонецПопытки;
//Далее создадим таблицу дисков компьютера
ТабДисков = Новый ТаблицаЗначений;
ТабДисков.Колонки.Добавить("Диск");
ТабДисков.Колонки.Добавить("Описание");
//Переберая полученную информацию из скрипта добавляем ее в таблицу
Пока СтрДлина (Текст)> 0 Цикл
Строка = ТабДисков.Добавить();
Строка.Диск = Лев(Текст,2);
// Далее определим тип диска:
// 1 - Дисковод
// 2 - Flash накопитель
// 3 - Локальный жесткий диск
// 4 - Сетевой диск
// 5 - CD/DVD дисковод
Строка.Описание = Сред(Текст,4,1);
Текст = Сред(Текст,6,СтрДлина (Текст)-5);
КонецЦикла;
// Далее переберая элементы таблицы выведем флешки в окно сообщений
Сообщить("Флешки:");
Для Каждого Элемента Из ТабДисков Цикл
Если Элемента.Описание = "2" Тогда
Сообщить(Элемента.Диск);
КонецЕсли;
КонецЦикла;
3-ий способ:
Код 1C v 8.х //Попытка подключения к WMI на локальном компьютере
Попытка
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);
Сообщить ("=======================") ;
КонецЦикла;
Автор:
Мигачев Евгений Категория:
COM-объекты, WMI, WSH Подключение к EXCEL и чтение данных из листа Excel Код 1C v 8.х Ex = Новый COMObject("Excel.Application");
Ex.Workbooks.Open(Путь);
Ex.Visible = 1;
ТекЛист=Ex.WorkSheets(1);
Для Ячейка = 1 по 400 цикл
Если НЕ ТекЛист.Cells(Ячейка,1).Value = Неопределено тогда
Сообщить(Строка(ТекЛист.Cells(Ячейка,1).Value));
Карта = Справочники.Номенклатура.НайтиПоКоду(ИзЧислаВСтроку(ТекЛист.Cells(Ячейка,1).Value));
Если Карта.Пустая() тогда
Сообщить(" Пустой элемент " + ТекЛист.Cells(Ячейка,1));
иначе
Объект = Карта.ПолучитьОбъект();
Объект.ОсновнойПоставщик = ОсновнойКлиент;
Объект.Записать();
конецесли;
конецесли;
конеццикла;
Примеры процедур для чтения данных из EXCEL
Код 1C v 8.х
// Функция получает данные из файла Excel
//
// Параметры:
// пФайл - Имя файла
// пЛист - Имя листа с данными
// СтруктураКолонок - Структура вида "ИмяКолонки" - "НомерКолонки"
// если не задано, созадуться колонки вида "К1", "К2"
//
// Возвращаемое значение:
// ТаблицаЗначений
//
Функция Excel_ПолучитьДанные_ADO(пФайл, пЛист, СтруктураКолонок = Неопределено, Знач НачСтрока = 0, Знач КонСтрока = 0) Экспорт
#Если Клиент Тогда
Состояние("Установка соединения с Excel");
#КонецЕсли
//ЗаголовкиВСтроке1 = "HDR=YES;"
ЗаголовкиВСтроке1 = "HDR=NO;";
СтрокаСоединения ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " + СокрЛП(пФайл) +" ;Extended Properties=""Excel 8.0;" + ЗаголовкиВСтроке1 + "IMEX=1;""";
Connection = Новый COMОбъект("ADODB.Connection");
Connection.ConnectionString = СтрокаСоединения;
Попытка
Connection.Open();
Исключение
Сообщить ("Проблемы с подключением к Excel" );
Возврат Неопределено;
КонецПопытки;
RS = Новый COMОбъект("ADODB.Recordset");
ТекстЗапроса =
"S_elect
| Лист.*
|FROM
| [" + пЛист + "$] as Лист";
Попытка
RS.Open(ТекстЗапроса, Connection);
Исключение
Сообщить ("Проблемы с выполнением запроса");
Возврат Неопределено;
КонецПопытки;
Таблица = Новый ТаблицаЗначений;
Если СтруктураКолонок = Неопределено Тогда
Для Счетчик = 1 По RS.Fields.Count Цикл
Поле = RS.Fields.Item(Счетчик - 1);
Колонка = Таблица.Колонки.Добавить("К" + Счетчик, , Поле.Name);
КонецЦикла;
Иначе
Для каждого КлючИЗначение Из СтруктураКолонок Цикл
Колонка = Таблица.Колонки.Добавить(КлючИЗначение.Ключ);
КонецЦикла;
КонецЕсли;
НомерСтроки = 0;
КолвоСтрок = RS.RecordCount;
Пока RS.EOF() = 0 Цикл
НомерСтроки = НомерСтроки + 1;
#Если Клиент Тогда
Состояние("Чтение файла: " + Формат(НомерСтроки) + " из " + Формат(КолвоСтрок));
ОбработкаПрерыванияПользователя();
#КонецЕсли
Если НомерСтроки < НачСтрока Тогда
RS.MoveNext ();
Продолжить;
КонецЕсли;
Если КонСтрока > 0 И НомерСтроки > КонСтрока Тогда
Прервать;
КонецЕсли;
НоваяСтрока = Таблица.Добавить();
Если СтруктураКолонок = Неопределено Тогда
Для Счетчик = 1 По RS.Fields.Count Цикл
Поле = RS.Fields.Item(Счетчик - 1);
НоваяСтрока["К" + Счетчик] = Поле.Value;
КонецЦикла;
Иначе
Для каждого КлючИЗначение Из СтруктураКолонок Цикл
Поле = RS.Fields.Item(КлючИЗначение.Значение - 1);
НоваяСтрока[КлючИЗначение.Ключ] = Поле.Value;
КонецЦикла;
КонецЕсли;
// Обработка других полей
RS.MoveNext ();
КонецЦикла;
// Завершение работы
RS.Close();
Connection.Close();
Возврат Таблица;
КонецФункции
// Функция получает данные из файла Excel
//
// Параметры:
// пФайл - Имя файла
// пЛист - Имя листа с данными
// СтруктураКолонок - Структура вида "ИмяКолонки" - "НомерКолонки"
// если не задано, созадуться колонки вида "К1", "К2"
// XLSОбъект - COM объект типа "Excel.Application"
//
// Возвращаемое значение:
// ТаблицаЗначений
//
Функция Excel_ПолучитьДанные_COM(пФайл, пЛист, СтруктураКолонок = Неопределено, Знач НачСтрока = 0, Знач КонСтрока = 0, XLSОбъект = Неопределено) Экспорт
#Если Клиент Тогда
Состояние("Открытие Excel");
#КонецЕсли
Если XLSОбъект = Неопределено Тогда
XLSОбъект = Новый COMОбъект("Excel.Application");
XLSОбъект.Visible = Ложь;
XLSОбъект.DisplayAlerts = Ложь;
КонецЕсли;
Попытка
Book = XLSОбъект.Workbooks.Open(пФайл, , Истина);
Исключение
Сообщить ("Проблемы с подключением к Excel" );
Возврат Неопределено;
КонецПопытки;
Лист = Book.Sheets(1);
КолвоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
КолвоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
Таблица = Новый ТаблицаЗначений;
Если СтруктураКолонок = Неопределено Тогда
Для Счетчик = 1 По КолвоКолонок Цикл
Колонка = Таблица.Колонки.Добавить("К" + Счетчик);
КонецЦикла;
Иначе
Для каждого КлючИЗначение Из СтруктураКолонок Цикл
Колонка = Таблица.Колонки.Добавить(КлючИЗначение.Ключ);
КонецЦикла;
КонецЕсли;
НачСтрока = ?(НачСтрока = 0, 1, НачСтрока);
КонСтрока = ?(КонСтрока = 0, КолвоСтрок, КонСтрока);
КонСтрока = Мин(КонСтрока, КолвоСтрок);
Для НомерСтроки = НачСтрока По КонСтрока Цикл
#Если Клиент Тогда
Состояние("Чтение файла: " + Формат(НомерСтроки) + " из " + Формат(КонСтрока));
ОбработкаПрерыванияПользователя();
#КонецЕсли
НоваяСтрока = Таблица.Добавить();
Если СтруктураКолонок = Неопределено Тогда
Для НомерКолонки = 1 По КолвоКолонок Цикл
Поле = Лист.Cells(НомерСтроки, НомерКолонки);
НоваяСтрока["К" + Формат(НомерКолонки, "ЧГ=0")] = Поле.Value;
КонецЦикла;
Иначе
Для каждого КлючИЗначение Из СтруктураКолонок Цикл
Поле = Лист.Cells(НомерСтроки, КлючИЗначение.Значение);
НоваяСтрока[КлючИЗначение.Ключ] = Поле.Value;
КонецЦикла;
КонецЕсли;
КонецЦикла;
XLSОбъект.Application.Quit();
Возврат Таблица;
КонецФункции
// Функция получает данные из файла Excel
//
// Параметры:
// пФайл - Имя файла
// пЛист - Имя листа с данными
// СтруктураКолонок - Структура вида "ИмяКолонки" - "НомерКолонки"
// если не задано, созадуться колонки вида "К1", "К2"
// XLSОбъект - COM объект типа "Excel.Application"
//
// Возвращаемое значение:
// ТаблицаЗначений
//
Функция Excel_ПолучитьДанные_COMArray(пФайл, пЛист, СтруктураКолонок = Неопределено, Знач НачСтрока = 0, Знач КонСтрока = 0, XLSОбъект = Неопределено) Экспорт
#Если Клиент Тогда
Состояние("Открытие Excel");
#КонецЕсли
Если XLSОбъект = Неопределено Тогда
XLSОбъект = Новый COMОбъект("Excel.Application");
XLSОбъект.Visible = Ложь;
XLSОбъект.DisplayAlerts = Ложь;
КонецЕсли;
Попытка
Book = XLSОбъект.Workbooks.Open(пФайл, , Истина);
Исключение
Сообщить ("Проблемы с подключением к Excel" );
Возврат Неопределено;
КонецПопытки;
Лист = Book.Sheets(1);
КолвоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
КолвоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
Таблица = Новый ТаблицаЗначений;
Если СтруктураКолонок = Неопределено Тогда
Для Счетчик = 1 По КолвоКолонок Цикл
Колонка = Таблица.Колонки.Добавить("К" + Счетчик);
КонецЦикла;
Иначе
МаксимальныйНомерКолонки = 0;
Для каждого КлючИЗначение Из СтруктураКолонок Цикл
Колонка = Таблица.Колонки.Добавить(КлючИЗначение.Ключ);
МаксимальныйНомерКолонки = Макс(МаксимальныйНомерКолонки, КлючИЗначение.Значение);
КонецЦикла;
КолвоКолонок = Мин(КолвоКолонок, МаксимальныйНомерКолонки);
КонецЕсли;
НачСтрока = ?(НачСтрока = 0, 1, НачСтрока);
КонСтрока = ?(КонСтрока = 0, КолвоСтрок, КонСтрока);
КонСтрока = Мин(КонСтрока, КолвоСтрок);
// Массив типа COMSafeArray
Массив = Лист.Range(Лист.Cells(НачСтрока, 1), Лист.Cells(КонСтрока, КолвоКолонок)).Value;
КолвоСтрок = Массив.GetUpperBound(1);
Для НомерСтроки = 1 По КолвоСтрок Цикл
#Если Клиент Тогда
Состояние("Чтение файла: " + Формат(НомерСтроки) + " из " + Формат(КолвоСтрок));
ОбработкаПрерыванияПользователя();
#КонецЕсли
НоваяСтрока = Таблица.Добавить();
Если СтруктураКолонок = Неопределено Тогда
Для НомерКолонки = 1 По КолвоКолонок Цикл
НоваяСтрока["К" + Формат(НомерКолонки, "ЧГ=0")] = Массив.GetValue(НомерКолонки, НомерСтроки);
КонецЦикла;
Иначе
Для каждого КлючИЗначение Из СтруктураКолонок Цикл
НоваяСтрока[КлючИЗначение.Ключ] = Массив.GetValue(КлючИЗначение.Значение, НомерСтроки);
КонецЦикла;
КонецЕсли;
КонецЦикла;
XLSОбъект.Application.Quit();
Возврат Таблица;
КонецФункции
// Функция получает список листов Excel
//
// Параметры:
// пФайл - Имя файла
// XLSОбъект - COM объект типа "Excel.Application"
//
// Возвращаемое значение:
// СписокЗначений
//
Функция Excel_ПолучитьСписокЛистов(пФайл, XLSОбъект = Неопределено) Экспорт
Если XLSОбъект = Неопределено Тогда
XLSОбъект = Новый COMОбъект("Excel.Application");
XLSОбъект.Visible = Ложь;
XLSОбъект.DisplayAlerts = Ложь;
КонецЕсли;
Попытка
Book = XLSОбъект.Workbooks.Open(пФайл, , Истина);
Исключение
Возврат Новый СписокЗначений;
КонецПопытки;
СписокЛистов = Новый СписокЗначений;
Для каждого Лист Из XLSОбъект.Sheets Цикл
СписокЛистов.Добавить(Лист.Name);
КонецЦикла;
XLSОбъект.Application.Quit();
Возврат СписокЛистов;
КонецФункции
Код 1C v 7.x Попытка
Excel = СоздатьОбъект("Excel.Application");
Исключение
Сообщить(ОписаниеОшибки()+"; программа Excel не установлена на данном компьютере!");
Возврат;
КонецПопытки;
РабочиеКниги=Excel.WorkBooks; // создаем рабочую книгу
Попытка // открываем файл
Отчет=РабочиеКниги.Open(Каталог+ИмяФайла);
Исключение
Сообщить(ОписаниеОшибки()+"; фаил с макросом не найден!");
Возврат;
КонецПопытки;
// заносим в таблицу какие-либо данные
Лист = Отчет.Worksheets(1);
Для Ном=1 По 20 Цикл
Ячейка = Лист .Cells(ном,1); Ячейка.Value;
Сообщить(Ячейка );
КонецЦикла;
Excel.Visible=1;
Попытка
Отчет.Save();
Исключение
Сообщить(ОписаниеОшибки()+"; не могу сохранить отчет!");
Возврат;
КонецПопытки;
Категория:
Работа с Microsoft Office и OpenOffice Получение списка баз 1С 7.7 из реестра Ниже приведено несколько способов получения списка баз 1С 7.7 из реестра:
Код получения списка баз 1С 7.7 из 8.х
Код 1C v 8.х функция сзПолучитьСписокБаз()
попытка
олеСкрипт = новый COMОбъект("MSScriptControl.ScriptControl");
олеСкрипт.Language = "VBScript";
стрКод =
"function strGetListBase()
| const RootKey = &H80000001
| set Reg = GetObject(""winmgmts:{impersonationLevel=impersonate}!\\."" &_
| ""\root\default:StdRegProv"")
| PathKey = ""Software\1C\1Cv7\7.7\Titles""
| Reg.EnumValues RootKey, PathKey, Arr
| Answer = ""{""""#"""",4772b3b4-f4a3-49c0-a1a5-8cb5961511a3,"" & chr(10)
| Answer = Answer & ""{3,1e512aab-1b41-4ef6-9375-f0137be9dd91,0,0,"" & chr(10)
| Answer = Answer & ""{"" & (UBound(Arr) + 1) & "","" & chr(10)
| for x = LBound(Arr) to UBound(Arr)
| call Reg.GetStringValue(RootKey, PathKey, Arr(x), Value)
| Answer = Answer & ""{1e512aab-1b41-4ef6-9375-f0137be9dd91,"" & chr(10) &_
| ""{"""""" & replace(Value, """""""", """""""""""") & """""",0,"" &_
| chr(10) & ""{""""S"""","""""" & Arr(x)& """"""},"" &_
| chr(10) & ""{3,0,"" & chr(10) & ""{0},"""""""",-1,-1,0,0}"" &_
| chr(10) & ""}"" & chr(10) & ""}""
| if x <> UBound(Arr) then Answer = Answer & "",""
| Answer = Answer & chr(10)
| next
| Answer = Answer & ""},"" & chr(10) & ""{""""Pattern""""}"" & chr(10) &_
| ""}"" & chr(10) & ""}""
| strGetListBase = Answer
|end function";
олеСкрипт.AddCode(стрКод);
стрОтвет = олеСкрипт.Run("strGetListBase");
Ответ = ЗначениеИзСтрокиВнутр(стрОтвет);
Ответ.СортироватьПоПредставлению();
исключение
Ответ = новый СписокЗначений;
Ответ.Добавить("Базы 1С:Передприятия 7.7 не обнаруженны!");
конецпопытки;
возврат Ответ;
конецфункции
Код для 1С 7.7
Код 1C v 7.x
Функция ПолучитьСписокБаз1()
Перем Value,arrValues;
Scr = CreateObject("MSScriptControl.ScriptControl");
Scr.Language = "vbscript";
Scr.Timeout=-1;
HKEY_CURRENT_USER = 2147483649;
strKeyPath = "Software\1C\1Cv7\7.7\Titles";
Locator=СоздатьОбъект("WbemScripting.SWbemLocator");
ServiceDef=Locator.ConnectServer(".","root\default");
oReg = ServiceDef.Get("StdRegProv");
Dict=СоздатьОбъект("Scripting.Dictionary");
Scr.AddObject("Dict",Dict);
Scr.AddObject("oReg",oReg);
Scr.ExecuteStatement("dim arrValues,Value:");
Scr.ExecuteStatement("oReg.EnumValues "+HKEY_CURRENT_USER+","""+strKeyPath+""",arrValues:");
Scr.ExecuteStatement("for i=lbound(arrValues) to ubound(arrValues):Dict.add ""pj"" & i, arrValues(i):next ");
ТЗБаз=СоздатьОбъект("ТаблицаЗначений");
ТЗБаз.НоваяКолонка("Путь");
ТЗБаз.НоваяКолонка("Описание");
Для к=0 По Dict.count Цикл
Д=Dict.Item("pj"+к);
Scr.ExecuteStatement("oReg.GetStringValue "+HKEY_CURRENT_USER+","""+strKeyPath+""","""+Д+""",Value");
ТЗБаз.НоваяСтрока();
ТЗБаз.Путь = Д;
ТЗБаз.Описание = Scr.eval("Value");
КонецЦикла;
//Посмотрим что в ТЗ
//ТЗБаз.ВыбратьСтроку();
Возврат ТЗБаз;
КонецФункции
Процедура ПолучитьСписокБаз2()
Попытка
scrptCtrl=createobject("MSScriptControl.ScriptControl");
scrptCtrl.language="vbscript";
scrptCtrl.addcode("Function Get1CV77Titles()
|const HKEY_CURRENT_USER = &H80000001
|Set oReg=GetObject(""winmgmts:{impersonationLevel=impersonate}!\\."" &_
|""\root\default:StdRegProv"")
|strKeyPath = ""Software\1C\1Cv7\7.7\Titles""
|oReg.EnumValues HKEY_CURRENT_USER, strKeyPath, arrValues
|strInfo=vbNullString
|For i = LBound(arrValues) To UBound(arrValues)
| call oReg.GetStringValue(HKEY_CURRENT_USER,strKeyPath,arrValues(i),Value)
| strInfo=strInfo & arrValues(i) & ""="" & Value & vbCrLF
|Next
|Get1CV77Titles = strInfo
|End Function");
Сообщить(scrptCtrl.run("Get1CV77Titles"));
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
<Сообщил Gloom>
Процедура ПолучитьСписокБаз3()
Ключ="HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Titles";
ИмяКаталога=СокрЛП(КаталогПользователя());
ИмяБазы=СокрЛП(каталогИБ());
Если прав(ИмяКаталога,1)<>"\" Тогда ИмяКаталога=ИмяКаталога+"\" КонецЕсли;
Если прав(ИмяБазы,1)<>"\" Тогда ИмяБазы=ИмяБазы+"\" КонецЕсли;
ИмяБазыСтр=Симв(34)+СтрЗаменить(ИмяБазы,"\","\\")+Симв(34);
ИмяФайла="USER.TXT";
Команда="Regedit /ea "+Симв(34)+ИмяКаталога+ИмяФайла+Симв(34)+" "+Симв(34)+Ключ+Симв(34);
КомандаСистемы(Команда);
Текст=СоздатьОбъект("Текст");
Текст.КодоваяСтраница(0);
Текст.Открыть(ИмяКаталога+ИмяФайла);
Текст.Показать();
Стр=""; Нашли=0;
Для сч=1 по Текст.КоличествоСтрок() Цикл
Стр=СокрЛП(Текст.ПолучитьСтроку(сч));
Сообщить(Стр);
Если Найти(стр,ИмяБазыСтр)<>0 Тогда
Нашли=1;
прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Категория:
COM-объекты, WMI, WSH Получение списка компьютеров сети (домена) Код 1C v 7.x
спКомп = СоздатьОбъект("СписокЗначений");
Попытка
ScrptCtrl=СоздатьОбъект("MSScriptControl.ScriptControl");
ScrptCtrl.Language="vbscript";
ScrptCtrl.AddCode("
|Function GetComputers()
| Set WinNT = GetObject(""WinNT:"")
| WinNT.Filter = Array(""domain"")
| For Each Domain In WinNT
| Set ADSI = GetObject(""WinNT://"" & Domain.Name)
| ADSI.Filter = Array(""computer"")
| For Each Comp In ADSI
| strInfo=strInfo & Domain.Name & "";"" & Comp.Name & vbCrLf
| Next
| Next
| GetComputers = strInfo
|End Function
|");
Текст=СокрЛП(ScrptCtrl.Run("GetComputers"));
ScrptCtrl = "";
Исключение
Предупреждение(ОписаниеОшибки());
Возврат;
КонецПопытки;
Для Индекс=1 по СтрКоличествоСтрок(Текст) Цикл
СтрТекста=СтрПолучитьСтроку(Текст,Индекс);
Разделитель=Найти(СтрТекста,";");
Домен=Лев(СтрТекста,Разделитель-1);
Компьютер=Прав(СтрТекста,СтрДлина(СтрТекста)-Разделитель);
спКомп.ДобавитьЗначение(Компьютер,Домен+""+Компьютер);
КонецЦикла;
спКомп.Сортировать();
Код 1C v 8.х
спКомп = Новый СписокЗначений;
Попытка
ScrptCtrl= Новый COMОбъект("MSScriptControl.ScriptControl");
ScrptCtrl.Language="vbscript";
ScrptCtrl.AddCode("
|Function GetComputers()
| Set WinNT = GetObject(""WinNT:"")
| WinNT.Filter = Array(""domain"")
| For Each Domain In WinNT
| Set ADSI = GetObject(""WinNT://"" & Domain.Name)
| ADSI.Filter = Array(""computer"")
| For Each Comp In ADSI
| strInfo=strInfo & Domain.Name & "";"" & Comp.Name & vbCrLf
| Next
| Next
| GetComputers = strInfo
|End Function
|");
Текст=СокрЛП(ScrptCtrl.Run("GetComputers"));
ScrptCtrl = "";
Исключение
Предупреждение(ОписаниеОшибки());
Возврат;
КонецПопытки;
Для Индекс=1 по СтрЧислоСтрок(Текст) Цикл
СтрТекста=СтрПолучитьСтроку(Текст,Индекс);
Разделитель=Найти(СтрТекста,";");
Домен=Лев(СтрТекста,Разделитель-1);
Компьютер=Прав(СтрТекста,СтрДлина(СтрТекста)-Разделитель);
спКомп.Добавить(Компьютер,Домен+""+Компьютер);
КонецЦикла;
спКомп.СортироватьПоПредставлению();
//Выберем комп
спКомп.ВыбратьЭлемент();
Категория:
COM-объекты, WMI, WSH Как переиндексировать все пользовательские таблицы? Код SQL CREATE PROCEDURE sp_DBReindex AS
SET NOCOUNT ON
DECLARE @TableName char(32)
DECLARE SysCur CURSOR FOR S_elect name FROM sysobjects WHERE type='U'
OPEN SysCur
FETCH NEXT FROM SysCur INTO @TableName
WHILE @@FETCH_STATUS=0
BEGIN
DBCC DBREINDEX(@TableName)
FETCH NEXT FROM SysCur INTO @TableName
END
CLOSE SysCur
DEALLOCATE SysCur
Категория:
Администрирование