Пример обращения к программе 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С на всех компьютерах В примере "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
Категория:
Администрирование Скрипт запуска 1С:Предприятия от имени Администратора или Пользователя Данные пример для 7.7, для 8-ых версий указать путь к 1Сv8.exe
Код VBS
Dim WshShell, ObjFSO
Set WshShell = CreateObject ("WScript.Shell")
set objFSO = CreateObject ("Scripting.FileSystemObject")
appl="C:\1Cv7\BINOP\1CV7s.exe"
users="DomenKompanii\emigachev"
Set objWMIService = GetObject _
("winmgmts:\\.\root\cimv2:Win32_Process")
errReturn = objWMIService.Create _
("cmd.exe /K ""title RUNAS_AUTO & runas.exe /user:" & users & " """ & appl & """""", Null, Null, intProcessID)
wscript.Sleep(1000)
wshShell.AppActivate "RUNAS_AUTO"
function WriteWord()
WshShell.SendKeys "P@ssw0rd"
end function
wscript.Sleep(1000)
wshShell.SendKeys "{ENTER}"
или так:
Код VBS
Set WshShell = CreateObject ("Wscript.Shell")
Set WshEnv = WshShell.Environment("PRocess")
WshShell.Run "runas.exe /user:DomenKompanii\emigachev C:\WD\1Cv7\BINOP\1CV7s.exe"
Wscript.Sleep 800
WshShell.AppActivate WshEnv("SystemRoot") & "\system32\runas.exe"
Wscript.Sleep 200
WshShell.SendKeys "P@ssw0rd"
Wscript.Sleep 500
Категория:
Администрирование Пример получения списка пользователей из файла users.usr Получает из users.usr список пользователей, каталоги пользователей и даже хеши паролей
Код 1C v 7.x // заполним список пользователей
FSO=createobject ("Scripting.FileSystemObject");
WshShell = CreateObject ("WScript.Shell");
Txt=FSO.OpenTextFile(КаталогИБ()+"usrdef\users.usr");
LineUser="";
ChI=0;
Пока Txt.AtEndOfStream=0 Цикл
Chi=Chi+1;
Buf=Txt.Read(1);
Если КодСимв(Buf)>31 Тогда
LineUser=LineUser+Buf;
КонецЕсли;
КонецЦикла;
LineBof="{"+chr(34)+"Container.Contents"+chr(34)+",";
LineUser=Сред(LineUser,Найти(LineUser,LineBof)+23);
LineUser=Сред(LineUser,1,Найти(LineUser,"}}"));
//Сп=СоздатьОбъект("СписокЗначений");
LineUser=СтрЗаменить(LineUser,РазделительСтрок," ");
LineUser=СтрЗаменить(LineUser,"},{",РазделительСтрок);
Для к=1 По СтрКоличествоСтрок(LineUser) Цикл
а=СтрЗаменить(СтрПолучитьСтроку(LineUser,к),Симв(34),"");
а=СтрЗаменить(СтрПолучитьСтроку(LineUser,к),"}","");
а=Сред(а,19);
а=Сред(а,Найти(а,",")+1);
а=Сред(а,1,Найти(а,",")-1);
а=СтрЗаменить(а,"""",""); // уберем кавычки
списПользователи.Установить(а,а);
КонецЦикла;
списПользователи.ТекущаяСтрока(1);
// Список Пользователей заполнен
Посмотрите еще:
Как получить список зарегистрированных пользователей базы 1С Категория:
Пользователь, роль доступа, интерфейс Как проиграть wav, mp3 файл Код 1C v 8.х ScriptCtrl = Новый COMОбъект("MSScriptControl.ScriptControl");
ScriptCtrl.Language = "vbscript";
ScriptCtrl.AddCode("
Function PlayS()
| Set Wrap = CreateObject (""DynamicWrapper"")
| Wrap.Register ""winmm.dll"", ""sndPlaySound"", ""i=sl"", ""f=s"", "r=l""
| PlayS = Wrap.sndPlaySound(""C:\Sounds\newemail.wav"", SDN_ASYNC)
| End Function");
ScriptCtrl.Run("PlayS");
Категория:
COM-объекты, WMI, WSH Как получить высоту картинки, изображения, локально и в интернет. Код 1C v 7.x Шелл=СоздатьОбъект("Shell.Application");
Место=Шелл.NameSpace(Путь);
Сообщить(Место.GetDetailsOf(Место.ParseName(Файл),26));
А если картинка на интерне сайте, и нужно узнать ее высоту, то:
Код 1C v 7.x ИЕ=CreateObject ("InternetExplorer.Application");
ИЕ.Navigate("Aboutblank"); // нужно AboutДВОЕТОЧИЕblank добавить в надежные узлы
Док=ИЕ.document;
Док.write("<img id=img src=file:"+Каталог+ИмяКартинки+">");
Результат = Док.getElementById("img").height;
//Или такой вариант:
Текст=СоздатьОбъект("Текст");
Текст.ДобавитьСтроку("<img id=img src='file://"+Путь+Файл+"' >");
Времянка=КаталогВременныхФайлов()+_GetPerformanceCounter()+".html";
Текст.Записать(Времянка);
ИЕ=CreateObject ("InternetExplorer.Application");
ИЕ.Navigate(Времянка);
Пока ИЕ.ReadyState<4 Цикл
КонецЦикла;
Док=ИЕ.document;
Сообщить(Док.getElementById("img").height);
Категория:
COM-объекты, WMI, WSH Получение списка баз 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 Скрипт переиндексации базы Код VBS Set Sh = CreateObject ("WScript.Shell")
'Переиндексирую базу
Set oExec1 = Sh.Exec("""C:\Program Files\1Cv77\BIN\1cv7.exe"" CONFIG /d""C:\bases2005"" /nПрограммист /pXXXXX /@c:\bases2005\ExtForms\sys\Chk.txt")
'Дожидаюсь, пока она не отработает
Do While oExec1.Status = 0
WScript.Sleep 100
Loop
Set oExec1 = Nothing
WScript.Sleep 10000
Категория:
COM-объекты, WMI, WSH Как отключить вывод splash заставки 1C предприятия ? Для 1С 7.7:
1. Воспользуйтесь файлом Отключение splash-заставки появляющейся при запуске 1С-Предприятия 7.7
2. При OLE - Нужно поставить NO_SPLASH_SHOW Внимание! - работает это только при запуске в режиме OLE Automation сервера
Код 1C v 7.x V7 = СоздатьОбъект("V77.Application");
Открыта=V7.Initialize(V7.RMTrade,"/dD:\ASP_COPY\1sbdb /nUser /p11111 /m", "NO_SPLASH_SHOW");
Если Открыта=0 Тогда
Предупреждение("Ошибка открытия инф. базы");
КонецЕсли;
ИмпортБИ=V7.CreateObject ("БухгалтерскиеИтоги");
//...
3. Изменить/убрать заставку при запуске
1 способ: Resource Browser'ом (плагин к FAR) заходим в 1crcrus.dll.
В ветке 1049/ZLIB_DATA находим что-то, так вот если ZLIB_DATA удалить, то никаких заставок при запуске 1С не будет. Правильно - потому что их нету
2 способ:
"Любым HEX-редактором найти в запускаемом *.EXE файле последовательность и заменить на другую:
Тип Имя файла: Найти: Заменить на:
Для Сетевой версии: в файле 1cv7.exe найти: 8B 87 54 85 00 00 и заменить на: 31 C0 90 90 90 90
Для Локальной версии: в файле 1cv7l.exe найти: 8B 8B 54 85 00 00 и заменить на 31 C9 90 90 90 90
Приведенные последовательности встречаются в файлах один раз, но для различных релизов по разным смещениям."
3 способ: Использовать патчер Soarona(по сути, он выполняет способ 2, ищите его на просторах Интернета)
Для 1С 8.х:
Для запуска создвайте скрипт VBS c кодом(для разных версий меняйте 81 на 80 или 82):
Для Файлового варианта
Код VBS Set DB=CreateObject ("v81.Application")
DB.Connect("File=D:\1C_base\ZUPRAZR;Usr=EMigachev;Pwd=12345")
DB.Visible=True
Для Клиент-серверного варианта
Код VBS Set DB=CreateObject ("v81.Application")
DB.Connect("Srvr=co1-aps-04;Ref=zup;Usr=EMigachev;Pwd=12345;")
DB.Visible=True
Категория:
Администрирование