Автоматическая архивация баз 1С 8.х для файлового и клиент-серверного варианта Данный способ архивации подходит для файловых и SQL версий баз 1С:
И так:
1. Создаем скрипт vbs и сохраняем его в
C:\Backup\ZUP.vbs
Код VBS
Set Wsh Shell = CreateObject("WScript.Shell")
dim d,m,y
d = day(date())
if d < 10 then
d = "0" & d
end if
m = month(date())
if m < 10 then
m = "0" & m
end if
y = year(date())
h = Hour(Time())
if h < 10 then
h = "0" & h
end if
Min = Minute(Time())
if Min < 10 then
Min = "0" & Min
end if
S = Second(Time())
if S < 10 then
S = "0" & S
end if
'Формируется полное имя файлов выгрузки и лога
s = d & "_" & m & "_" & y & "_" & h & "_" & Min & "_" & S
'Путь к файлу выгрузки
BackupPath = "/DumpIB \\Server1CBackup\SQL_Backup\1c_backup\ZUP\BACKUP\ZUP_" & s & ".dt"
'Путь к логу
LogPath = "/Out \\Server1CBackup\SQL_Backup\1c_backup\ZUP\log\ZUP_Log_" & s & ".log -NoT_runcate"
'Путь к фалу запуска программы 1С
one1CPath = """%systemdrive%\Program Files\1cv81\bin\1cv8.exe"""
'Параметры запуска базы (SQL) имя кластера\имя базы пользователь пароль
Paramters = "DESIGNER /S Server1C\ZUP /N UserAdmin1C /P PassWordUserAdmin1C /DisableStartupMessages"
Set fs = CreateObject("Scripting.FileSystemObject")
'Запуск
Wsh Shell.Run one1CPath & " " & Paramters& " " & LogPath & " " & BackupPath, 0, True
2. На Server1C создаем Назначенные задания с параметрами как на рисунках ниже:
3. В итоге получаем архивные файлы выгрузок 1С и логи:
Категория:
Администрирование Работа с буфером обмена средствами 1С Копировать из 1С в буфер обмена( без ВК):
Код 1C v 8.х ЭлементыФормы.Добавить(Тип("ПолеHTMLДокумента"), "Поле_HTML_Документа_acb123", Ложь);
Окно = ЭлементыФормы.Поле_HTML_Документа_acb123.Документ.ParentWindow;
Окно.ClipboardData.SetData("Text", ТекстПисьма);
ЭлементыФормы.Удалить(ЭлементыФормы.Индекс(ЭлементыФормы.Найти("Поле_HTML_Документа_acb123")));
Вставить в 1С из буфера обмена:
Код 1C v 8.х ЭлементыФормы.Добавить(Тип("ПолеHTMLДокумента"), "Поле_HTML_Документа_acb123", Ложь);
Окно = ЭлементыФормы.Поле_HTML_Документа_acb123.Документ.ParentWindow;
СодержимоеБуфера = Окно.ClipboardData.GetData("Text");
ЭлементыФормы.Удалить(ЭлементыФормы.Индекс(ЭлементыФормы.Найти("Поле_HTML_Документа_acb123")));
ТекстПисьма = ТекстПисьма + СодержимоеБуфера;
При определенных настройках политики безопасности, способ с ПолеHTMLДокумента НЕ работает, используйте:
Код 1C v 8.х
Функция ПолучитьТекстБуфераОбмена() Экспорт
#Если Клиент Тогда
Объект = Новый COMОбъект("htmlfile");
Возврат Объект.ParentWindow.ClipboardData.Getdata("Text");
#КонецЕсли
КонецФункции
Функция УстановитьТекстВБуферОбмена(Текст) Экспорт
#Если Клиент Тогда
Объект = Новый COMОбъект("htmlfile");
Объект.ParentWindow.ClipboardData.Setdata("Text", Текст);
Возврат Текст;
#КонецЕсли
КонецФункции
Для 7.7:
Код 1C v 7.x Set objHTM = CreateObject("htmlfile");
Текст = "Помощь в 1С";
objHTM.ParentWindow.ClipboardData.Setdata("Text", Текст);
Текст = objHTM.ParentWindow.ClipboardData.GetData("text");
Используя
WSH :
Код 1C v 8.х // через SendKeys передаем Ctrl-C и Ctrl-V
wsh =Новый COMОбъект("WScript.Shell");
// Скопировать текст
wsh .SendKeys("^c");
// Вставить текст
wsh .SendKeys("^v");
Код 1C v 7.x // через SendKeys передаем Ctrl-C и Ctrl-V
wsh =СоздатьОбъект("WScript.Shell");
// Скопировать текст
wsh .SendKeys("^c"); // или так: wsh .SendKeys("^(C)");
// Вставить текст
wsh .SendKeys("^v"); // или так: wsh .SendKeys("^(V)");
//Объект Clipboard
Wsh Extra = СоздатьОбъект("Wsh Extra.Clipboard");
// Скопировать текст
Wsh Extra.Copy("Запись в буфер обмена")
// Вставить текст
Текст = Wsh Extra.Paste();
Категория:
Полезные, Универсальные Функции Сохранение рабочей конфигурации в файл средствами встроенного языка Как сохранить рабочую конфигурацию из конфигуратора знают все, но это не всегда удобно. Мне понадобилось сохранять рабочую конфигурацию и тут-же этот файл обрабатывать. Предлагаю простую процедуру:
Код 1C v 8.х // функция сохраняет рабочую конфигурацию в файл, в случае успеха возвращает Истина
// параметры:
// Логин - имя пользователя с правами на админисирирование БД
// Пароль - строка пароля
// ИмяФайла - полное имя файла для сохранения конфигурации, не обязательно.
// по умолчанию использует каталог временных файлов и имя 1Cv8.cf
функция СохранитьТекущуюКонфигурацию (Логин, Пароль, ИмяФайла="") экспорт
результат = Ложь;
Если ИмяФайла = "" Тогда
ИмяФайла = КаталогВременныхФайлов() + "1Cv8.cf";
КонецЕсли;
СтрокаБазы = СтрокаСоединенияИнформационнойБазы();
Если Лев(СтрокаБазы, 5) = "File=" Тогда
// файловый вариант
СтрокаБазы = Сред(СтрокаБазы, 6, СтрДлина(СтрокаБазы) - 6);
Иначе
// серверный вариант пока не готов...
// может кто допишет?
возврат Ложь;
КонецЕсли;
ВыбФайл = Новый Файл(ИмяФайла);
Если ВыбФайл.Существует() Тогда
Сигнатура = Строка(ВыбФайл.Размер()) + Строка(ВыбФайл.ПолучитьВремяИзменения());
Иначе
Сигнатура = "";
КонецЕсли;
СтрокаЗапуска = """" + КаталогПрограммы() + "1cv8.exe"" CONFIG /F " + СтрокаБазы
+ ?(Логин = "", "", " /N " + Логин)
+ ?(Пароль = "", "", " /P " + Пароль) + " /DumpDBCfg """ + ИмяФайла + """";
//
// КомандаСистемы (СтрокаЗапуска); не работает!!!!! из-за кавычек в параметрах
// приходиться идти кругом...
// зато можно избежать черного окошка
//
Wsh Shell = Новый COMОбъект("WScript.Shell");
Wsh Shell.Run(СтрокаЗапуска, 0, Истина);
ВыбФайл = Новый Файл(ИмяФайла);
Если ВыбФайл.Существует() Тогда
НоваяСигнатура = Строка(ВыбФайл.Размер()) + Строка(ВыбФайл.ПолучитьВремяИзменения());
Если Сигнатура <> НоваяСигнатура Тогда
Результат = Истина;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
ну и пример использования (работает если нет пароля):
Код 1C v 8.х Функция ЗаписатьКонфигурациюВФайл(ИмяФайла="")
Результат = Ложь;
ВыбФайл = Новый Файл(ИмяФайла);
Если ВыбФайл.Существует() Тогда
Если ВыбФайл.ЭтоКаталог() Тогда
ИмяФайла="";
КонецЕсли;
КонецЕсли;
Попытка
Массив = ПользователиИнформационнойБазы.ПолучитьПользователей();
Логин = "";
Пароль = "";
Если Массив.Количество() > 0 тогда
Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
Логин = Пользователь.Имя;
Если Пользователь.ПарольУстановлен Тогда
// тут нужно получить пароль, лучше интерактивно
// но лично мне это совсем не нужно
Предупреждение("У Вас установлен пароль, этот режим сейчас не доступен");
Возврат Ложь;
КонецЕсли
КонецЕсли;
Результат = СохранитьТекущуюКонфигурацию(Логин, Пароль, ИмяФайла);
Если не Результат Тогда
Предупреждение("Конфигурация не сохранена");
Иначе
Сообщить("Конфигурация успешно сохранена в файл: " + ИмяФайла);
КонецЕсли;
Исключение
Предупреждение("У Вас не достаточно прав для сохранения конфигурации");
Возврат Ложь;
КонецПопытки;
Возврат Результат;
КонецФункции
Автор статьи: vde69 Категория:
Полезные, Универсальные Функции Как в 1С автоматически переключать раскладку клавиатуры? Для этого можно использовать функционал следующих внешних компонент:
1. FormEx смотрите тут.
Код 1C v 7.x Сервис=СоздатьОбъект("Сервис");
Сервис.РаскладкаКлавиатуры("Russian");
2. Miracle смотрите тут.
3. NetaTable смотрите тут.
Код 1C v 7.x Если (ЗагрузитьВнешнююКомпоненту("NetaTable.dll")=1) Тогда
РовнаяТаблица=СоздатьОбъект("AddIn.NTable");
Иначе
Предупреждение("Внешняя компонента AddIn.NetaTable НЕ подключена!!!"+РазделительСтрок+"Работа программы невозможна!!!");
СтатусВозврата(0);
Возврат
КонецЕсли;
Процедура ПриНачалеВыбораЗначения(ИдентЭлемента,ФлагОтбора)
Если ИдентЭлемента = "Диагноз" Тогда
РовнаяТаблица.УстановитьРаскладку(67699721);
ИначеЕсли ИдентЭлемента = "ИсточникФинансирования" Тогда
РовнаяТаблица.УстановитьРаскладку(68748313);
КонецЕсли;
КонецПроцедуры
А можно и без внешних компонент:
Код 1C v 7.x //примеры Sserj
Процедура СменитьРаскладку(Реж)
//Можно и просто через wrapper.dll
//Wrapper = CreateObject("DynamicWrapper");
//Wrapper.Register("USER32.DLL", "ActivateKeyboardLayout", "i=ll", "f=s", "r=l");
//Wrapper.Register("USER32.DLL", "LoadKeyboardLayout", "i=sl", "f=s", "r=l");
//rus = Wrapper.LoadKeyboardLayout("00000419", 0);
//eng = Wrapper.LoadKeyboardLayout("00000409", 0);
//Если Реж = "RUS" Тогда
// Wrapper.ActivateKeyboardLayout(rus, 0);
//ИначеЕсли Реж = "EN" Тогда
// Wrapper.ActivateKeyboardLayout(eng , 0);
//КонецЕсли;
Если Не (Константа.ВключатьНамЛоокВТелефонах = Истина) Тогда
Возврат;
КонецЕсли;
wsh Shell=createObject("wScript.shell");
Если Реж = "RUS" Тогда
wsh Shell.SendKeys("^(8)",0);
ИначеЕсли Реж = "EN" Тогда
wsh Shell.SendKeys("^(9)",0);
КонецЕсли;
КонецПроцедуры // СменитьРаскладку(Реж)
//ЕЩЕ
//Обновляем хоткеи смены языков, для подмены в полях где нужна английская раскладка
текст = СоздатьОбъект("текст");
текст.ДобавитьСтроку("Windows Registry Editor Version 5.00");
текст.ДобавитьСтроку("");
текст.ДобавитьСтроку("[HKEY_CURRENT_USER\Control Panel\Input Method\Hot Keys\00000100]");
текст.ДобавитьСтроку("""Virtual Key""=hex:39,00,00,00");
текст.ДобавитьСтроку("""Key Modifiers""=hex:02,c0,00,00");
текст.ДобавитьСтроку("""Target IME""=hex:09,04,09,04");
текст.ДобавитьСтроку("");
текст.ДобавитьСтроку("[HKEY_CURRENT_USER\Control Panel\Input Method\Hot Keys\00000101]");
текст.ДобавитьСтроку("""Virtual Key""=hex:38,00,00,00");
текст.ДобавитьСтроку("""Key Modifiers""=hex:02,c0,00,00");
текст.ДобавитьСтроку("""Target IME""=hex:19,04,19,04");
ИмяФайла = КаталогИБ() + "LangHotKey.reg";
Попытка
текст.Записать(ИмяФайла);
wsh Shell=createObject("wScript.shell");
StrComand = "regedit /S " + СокрЛП(ИмяФайла);
wsh Shell.Run(StrComand,1);
//Задерживаемся, иначе скрипт не успевает прочитать файл
Для Сч=1 По 50000 Цикл
КонецЦикла;
ФС.УдалитьФайл(ИмяФайла);
Исключение
КонецПопытки;
Категория:
Полезные, Универсальные Функции Запись СД из 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");
wsh shell=СоздатьОбъект("WScript.Shell");
КаталогДляЗаписи=wsh shell.regread("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\CD Burning");
fso.CopyFile(Каталог+Имя,КаталогДляЗаписи+"\"+Имя,-1);
ДискДляЗаписиNS=shell.NameSpace(ДискДляЗаписи);
wsh shell.regwrite("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\CD Burning\Auto Eject",АвтоИзвлечениеСД,"REG_DWORD");
wsh shell.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();
Пока wsh shell.appactivate("Мастер записи компакт-дисков")=0 Цикл
КонецЦикла;
wsh shell.sendkeys("{ENTER}")
КонецЕсли;
e.moveNext(0);
КонецЦикла;
Пока wsh shell.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С:Предприятия от имени Администратора или Пользователя Данные пример для 7.7, для 8-ых версий указать путь к 1Сv8.exe
Код VBS
Dim Wsh Shell, ObjFSO
Set Wsh Shell = 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)
wsh Shell.AppActivate "RUNAS_AUTO"
function WriteWord()
Wsh Shell.SendKeys "P@ssw0rd"
end function
wscript.Sleep(1000)
wsh Shell.SendKeys "{ENTER}"
или так:
Код VBS
Set Wsh Shell = CreateObject("Wscript.Shell")
Set Wsh Env = Wsh Shell.Environment("PRocess")
Wsh Shell.Run "runas.exe /user:DomenKompanii\emigachev C:\WD\1Cv7\BINOP\1CV7s.exe"
Wscript.Sleep 800
Wsh Shell.AppActivate Wsh Env("SystemRoot") & "\system32\runas.exe"
Wscript.Sleep 200
Wsh Shell.SendKeys "P@ssw0rd"
Wscript.Sleep 500
Категория:
Администрирование Пример получения списка пользователей из файла users.usr Получает из users.usr список пользователей, каталоги пользователей и даже хеши паролей
Код 1C v 7.x // заполним список пользователей
FSO=createobject("Scripting.FileSystemObject");
Wsh Shell = 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С Категория:
Пользователь, роль доступа, интерфейс