Как декодировать (преобразовать) Unicode в 1С При разработке очередного обмена с интернет магазином через API столкнулисть что сайт возвращает ответ в виде:
Код VBS {"ok" :"true" ,"description" :"\u0421\u0442\u0430\u0442\u0443\u0441 \u0437\u0430\u043a\u0430\u0437\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d" }
из кода ясно что это JSON и используя код ПрочитатьJSON
Код 1C v 8.3 Чтение = Новый ЧтениеJSON;
Чтение. УстановитьСтроку( стрВходящая) ;
ДанныеЛога = ПрочитатьJSON( Чтение) ;
Чтение. Закрыть( ) ;
В переменной ДанныеЛога будет структура в виде
В результате получилась функция с 2-мя вариантами возрата, в зависимости от того как нужно
Код 1C v 8.3
Функция ДекодироватьUniCodeВJSON(стрВходящая)
Чтение = Новый ЧтениеJSON;
Чтение. УстановитьСтроку( стрВходящая) ;
ДанныеЛога = ПрочитатьJSON( Чтение) ;
Чтение. Закрыть( ) ;
Текст = "" ;
Для каждого Элемент Из ДанныеЛога Цикл
Текст = Текст + ? ( НЕ ПустаяСтрока( Текст) , Символы. ПС, "" ) ;
Текст = Текст + Элемент. Ключ + " = " + Элемент. Значение;
КонецЦикла ;
Возврат Текст;
Запись = Новый ЗаписьJSON;
Запись. УстановитьСтроку( Новый ПараметрыЗаписиJSON( ПереносСтрокJSON. Нет) ) ;
ЗаписатьJSON( Запись, ДанныеЛога, ) ;
Возврат Запись. Закрыть( ) ;
КонецФункции
На просторах интернета была найдена еще одна функция:
Код 1C v 8.3
Функция ПереобразоватьЮникод(Строка)
ГотововаяСтрока = "" ;
МасУкр = Новый Массив( 66 ) ;
МасУкр[0 ]= "А" ; МасУкр[1 ]= "Б" ; МасУкр[2 ]= "В" ; МасУкр[3 ]= "Г" ; МасУкр[4 ]= "Ґ" ; МасУкр[5 ]= "Д" ;
МасУкр[6 ]= "Е" ; МасУкр[7 ]= "Є" ; МасУкр[8 ]= "Ж" ; МасУкр[9 ]= "З" ; МасУкр[10 ]= "И" ; МасУкр[11 ]= "І" ;
МасУкр[12 ]= "Ї" ; МасУкр[13 ]= "Й" ; МасУкр[14 ]= "К" ; МасУкр[15 ]= "Л" ; МасУкр[16 ]= "М" ; МасУкр[17 ]= "Н" ;
МасУкр[18 ]= "О" ; МасУкр[19 ]= "П" ; МасУкр[20 ]= "Р" ; МасУкр[21 ]= "С" ; МасУкр[22 ]= "Т" ; МасУкр[23 ]= "У" ;
МасУкр[24 ]= "Ф" ; МасУкр[25 ]= "Х" ; МасУкр[26 ]= "Ц" ; МасУкр[27 ]= "Ч" ; МасУкр[28 ]= "Ш" ; МасУкр[29 ]= "Щ" ;
МасУкр[30 ]= "Ь" ; МасУкр[31 ]= "Ю" ; МасУкр[32 ]= "Я" ;
МасУкр[33 ]= "а" ; МасУкр[34 ]= "б" ; МасУкр[35 ]= "в" ; МасУкр[36 ]= "г" ; МасУкр[37 ]= "ґ" ; МасУкр[38 ]= "д" ;
МасУкр[39 ]= "е" ; МасУкр[40 ]= "є" ; МасУкр[41 ]= "ж" ; МасУкр[42 ]= "з" ; МасУкр[43 ]= "и" ; МасУкр[44 ]= "і" ;
МасУкр[45 ]= "ї" ; МасУкр[46 ]= "й" ; МасУкр[47 ]= "к" ; МасУкр[48 ]= "л" ; МасУкр[49 ]= "м" ; МасУкр[50 ]= "н" ;
МасУкр[51 ]= "о" ; МасУкр[52 ]= "п" ; МасУкр[53 ]= "р" ; МасУкр[54 ]= "с" ; МасУкр[55 ]= "т" ; МасУкр[56 ]= "у" ;
МасУкр[57 ]= "ф" ; МасУкр[58 ]= "х" ; МасУкр[59 ]= "ц" ; МасУкр[60 ]= "ч" ; МасУкр[61 ]= "ш" ; МасУкр[62 ]= "щ" ;
МасУкр[63 ]= "ь" ; МасУкр[31 ]= "ю" ; МасУкр[65 ]= "я" ;
МасКод = Новый Массив( 66 ) ;
МасКод[0 ]= "0410" ; МасКод[1 ]= "0411" ; МасКод[2 ]= "0412" ; МасКод[3 ]= "0413" ; МасКод[4 ]= "0490" ; МасКод[5 ]= "0414" ;
МасКод[6 ]= "0415" ; МасКод[7 ]= "0404" ; МасКод[8 ]= "0416" ; МасКод[9 ]= "0417" ; МасКод[10 ]= "0418" ; МасКод[11 ]= "0406" ;
МасКод[12 ]= "0407" ; МасКод[13 ]= "0419" ; МасКод[14 ]= "041A" ; МасКод[15 ]= "041B" ; МасКод[16 ]= "041C" ; МасКод[17 ]= "041D" ;
МасКод[18 ]= "041E" ; МасКод[19 ]= "041F" ; МасКод[20 ]= "0420" ; МасКод[21 ]= "0421" ; МасКод[22 ]= "0422" ; МасКод[23 ]= "0423" ;
МасКод[24 ]= "0424" ; МасКод[25 ]= "0425" ; МасКод[26 ]= "0426" ; МасКод[27 ]= "0427" ; МасКод[28 ]= "0428" ; МасКод[29 ]= "0429" ;
МасКод[30 ]= "042C" ; МасКод[31 ]= "042E" ; МасКод[32 ]= "042F" ;
МасКод[33 ]= "0430" ; МасКод[34 ]= "0431" ; МасКод[35 ]= "0432" ; МасКод[36 ]= "0413" ; МасКод[37 ]= "0491" ; МасКод[38 ]= "0434" ;
МасКод[39 ]= "0435" ; МасКод[40 ]= "0454" ; МасКод[41 ]= "0436" ; МасКод[42 ]= "0437" ; МасКод[43 ]= "0438" ; МасКод[44 ]= "0456" ;
МасКод[45 ]= "0457" ; МасКод[46 ]= "0439" ; МасКод[47 ]= "043A" ; МасКод[48 ]= "043B" ; МасКод[49 ]= "043C" ; МасКод[50 ]= "043D" ;
МасКод[51 ]= "043E" ; МасКод[52 ]= "043F" ; МасКод[53 ]= "0440" ; МасКод[54 ]= "0441" ; МасКод[55 ]= "0442" ; МасКод[56 ]= "0443" ;
МасКод[57 ]= "0444" ; МасКод[58 ]= "0445" ; МасКод[59 ]= "0446" ; МасКод[60 ]= "0447" ; МасКод[61 ]= "0448" ; МасКод[62 ]= "0449" ;
МасКод[63 ]= "044C" ; МасКод[31 ]= "044E" ; МасКод[65 ]= "044F" ;
тмпСтрока = "" ;
Для Счетчик = 1 По СтрДлина( Строка) Цикл
Если Лев( Строка, 1 ) = "\" Тогда
Если Лев( Строка, 2 ) = "\u" Тогда
тмпСтрока = Прав( Лев( Строка, 6 ) , 4 ) ;
Если МасКод. Найти( тмпСтрока) = Неопределено Тогда
СтрокаЗамены = Прав( тмпСтрока, 1 ) ;
тмпСтрока = СтрЗаменить( тмпСтрока, СтрокаЗамены, ТРег( СтрокаЗамены) ) ;
Если МасКод. Найти( тмпСтрока) = Неопределено Тогда
Сообщить( "Код символа не найден: " + тмпСтрока) ;
Иначе
ГотововаяСтрока = ГотововаяСтрока + МасУкр[МасКод. Найти( тмпСтрока) ] ;
КонецЕсли ;
Иначе
ГотововаяСтрока = ГотововаяСтрока + МасУкр[МасКод. Найти( тмпСтрока) ] ;
КонецЕсли ;
Строка = Прав( Строка, ( СтрДлина( Строка) - 6 ) ) ;
Иначе
Строка = Прав( Строка, ( СтрДлина( Строка) - 2 ) ) ;
КонецЕсли ;
Иначе
ГотововаяСтрока = ГотововаяСтрока + Лев( Строка, 1 ) ;
Строка = Прав( Строка, ( СтрДлина( Строка) - 1 ) ) ;
КонецЕсли ;
КонецЦикла ;
Возврат ГотововаяСтрока ;
КонецФункции
Категория:
WEB-сервисы, WS-ссылки, XDTO-пакеты Как очистить кэш 1С? Бывают случаи, когда на данном компьютере пользователя в рабочей базе была старая конфигурация, хотя на любом другом ПК и на сервере она обновилась. Так же может возникать ошибка потока данных. В этих и некоторых других случаях поможет очистка кеша.
В связи с тем, что 1С может быть установлена на различных операционных системах, папка, где хранится кэш, может быть различной.
Для Win XP:
%userprofile%\Local Settings\Application Data\1C\1Cv82
%userprofile%\Application Data\1C\1Cv82
Для Win 7:
%userprofile%\AppData\Roaming\1C\1Cv82
%userprofile%\AppData\Local\1C\1Cv82
Серверные оси Windows 2008
C:\Users\<username>\AppData\Local\1C
C:\Users\<username>\AppData\Roaming\1C
А самый простой способ найти папки – это использовать поиск по системе(win + F) по ключевым словам «1сv81» и/или «1cv82». Нужные нам папки находятся в каталоге пользователя.
Напимер:
C:\Documents and Settings\%userprofile%\Local Settings\Application Data\1C\1Cv81
C:\Documents and Settings\%userprofile% \Local Settings\Application Data\1C\1Cv82
C:\Documents and Settings\%userprofile% \Application Data\1C\1Cv81\
C:\Documents and Settings\%userprofile% \Application Data\1C\1Cv82\
Важно:
1) Кэш хранится в двух папках. Чаще всего эти папки называются «LocalSettings» и «ApplicationData». Обе папки находятся в каталоге пользователя.
2) Формат кэш-файлов выглядит вот так: «0df525c2-1c3e-44be-b852-c7059f17c5aa» или «0f2c4d8f-cc84-4033-8744-1acfa6204474». Удалять необходимо только те папки, у которых такой же формат в названии.
3.) Не удаляйте файл ibases.v8i — он содержит список баз
Можно ли изменить путь кэша метаданных?
Можно. С помощью групповых политик (gpedit.msc) можно переопределить путь профиля пользователя целиком (не только кэш метаданных).
ВАРИАНТЫ АВТОМАТИЗАЦИИ:
1. Доп. ключик командной строки
/ClearCache — очистка кэша клиент-серверных вызовов (используется для тонкого и толстого клиентов в режиме 1С:Предприятия).
2. bat / cmd файл:
Код VBS @FOR /D %%i in ("C:\Users\*" ) do (
@FOR /D %%j in ("%%i\Local settings\Application data\1C\1Cv82\????????-????-????-????-????????????" ) do rd /s /q "%%j"
@FOR /D %%j in ("%%i\AppData\Roaming\1C\1Cv82\????????-????-????-????-????????????" ) do rd /s /q "%%j"
)
и текст батника с проверкой на ХР или 7:
Код VBS If Exist %USERPROFILE%\AppData\Roaming\1 C\1 Cv82 (
rem Удаляем все файлы в 7
Del /F /Q %USERPROFILE%\AppData\Roaming\1 C\1 Cv82\*.*
Del /F /Q %USERPROFILE%\AppData\Local\1 C\1 Cv82\*.*
rem Удаляем все каталоги в 7
for /d %%i in ("%USERPROFILE%\AppData\Roaming\1C\1Cv82\*" ) do rmdir /s /q "%%i"
for /d %%i in ("%USERPROFILE%\AppData\Local\1C\1Cv82\*" ) do rmdir /s /q "%%i"
)
If Exist %USERPROFILE%\Local Settings\Application Data\1 C\1 Cv82 (
rem Удаляем все файлы в XP
Del /F /Q %USERPROFILE%\Local Settings\Application Data\1 C\1 Cv82\*.*
Del /F /Q %USERPROFILE%\Application Data\1 C\1 Cv82\*.*
rem Удаляем все файлы в XP
for /d %%i in ("%USERPROFILE%\Local Settings\Application Data\1C\1Cv82\*" ) do rmdir /s /q "%%i"
for /d %%i in ("%USERPROFILE%\Application Data\1C\1Cv82\*" ) do rmdir /s /q "%%i"
)
3. Процедуру ОчиститьКэшИПерезапуститьПрограмму() создаем в глобальном модуле и вызываем ее когда нужно почистить кэш 1С
Код 1C v 8.х // Процедура создает и запускает vbs файл, который производит очистку кэша.
// 1С и презапускает программу
//
Процедура ОчиститьКэшИПерезапуститьПрограмму() Экспорт
СкриптФайл = Новый ТекстовыйДокумент;
СтрокаСоединенияСБД = СтрокаСоединенияИнформационнойБазы();
СтрокаЗапускаПрограммы = КаталогПрограммы();
ПутьКФайлуСкрипта = КаталогВременныхФайлов() + "CacheCleaning.vbs";
ПутьКФайлу1С = СтрокаЗапускаПрограммы + "1cv8.exe";
ИмяСервера = "";
ИмяБазы = "";
Путь = "";
КомандаЗапуска = "";
Один = """";
Два = """""";
Три = """""""";
Если (Найти(СтрокаСоединенияСБД, "File=") <> 0) Тогда
Путь = СтрЗаменить(СтрокаСоединенияСБД, "File=", "");
Путь = Лев(Путь, СтрДлина(Путь)-1);
КомандаЗапуска = "WshShell.Run " + Три + ПутьКФайлу1С + Два + " ENTERPRISE /F" + Путь + Один + ", 1, true";
Иначе
МассивПараметровСоединения = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтрокаСоединенияИнформационнойБазы(), ";");
МассивПараметровСервера = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(МассивПараметровСоединения[0], """");
ИмяСервера = СокрЛП(МассивПараметровСервера[1]);
МассивПараметровБазы = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(МассивПараметровСоединения[1], """");
ИмяБазы = СокрЛП(МассивПараметровБазы[1]);
КомандаЗапуска = "WshShell.Run " + Три + ПутьКФайлу1С + Два + " ENTERPRISE /S" + ИмяСервера + "\" + ИмяБазы + Один + ", 1, true";
КонецЕсли;
// Если пользователь не хочет перезапускать сеанс 1С, то после выполнения скрипта ничего не делаем.
Если Не глЗначениеПеременной("глПерезапускатьСеансРаботыСПрограммой") Тогда
КомандаЗапуска = "";
КонецЕсли;
СкриптФайл.УстановитьТекст("WScript.Sleep(5000)
|
|Dim FSO
|Set FSO = WScript.CreateObject(""Scripting.FileSystemObject"")
|Set WshShell = WScript.CreateObject(""WScript.Shell"")
|Set colEnvVars = WshShell.Environment(""Process"")
|
|strComputer = "".""
|Set objWMI Service = GetObject(""winmgmts:"" _
|& ""{impersonationLevel=impersonate}!\\"" _
|& strComputer & ""\root\cimv2"")
|
|Set colProcesses = objWMI Service.ExecQuery( _
|""S_elect * From Win32_Process "" _
|& ""Where Name = '1cv8.exe'"")
|
|For Each objProcess In colProcesses
| objProcess.Terminate
|Next
|
|WScript.Sleep(1000)
|
|FolderName1 = ""\Local Settings\Application Data\1C\1Cv82""
|FolderName2 = ""\Local Settings\Application Data\1C\1Cv81""
|FolderName3 = ""\appdata\Local\1C\1Cv82""
|FolderName4 = ""\appdata\Local\1C\1Cv81""
|
|If FSO.FolderExists(colEnvVars(""userprofile"") & FolderName1) Then
| GoSubFolders colEnvVars(""userprofile"") & FolderName1
|End If
|If FSO.FolderExists(colEnvVars(""userprofile"") & FolderName2) Then
|GoSubFolders colEnvVars(""userprofile"") & FolderName2
| End If
|If FSO.FolderExists(colEnvVars(""userprofile"") & FolderName3) Then
| GoSubFolders colEnvVars(""userprofile"") & FolderName3
|End If
|If FSO.FolderExists(colEnvVars(""userprofile"") & FolderName4) Then
| GoSubFolders colEnvVars(""userprofile"") & FolderName4
|End If
|
|" + КомандаЗапуска + "
|Set WshShell = Nothing
|
|Sub DelFile(sFILE)
| On Error Resume Next
| FSO.DeleteFile sFILE, True
| If Err.Number <> 0 Then
| Wscript.Echo ""Error deleting file: "" & sFILE
| End If
|End sub
|
|Function GetFolder(sFOLDER)
| On Error Resume Next
| Set GetFolder = FSO.GetFolder(sFOLDER)
| If Err.Number <> 0 Then
| Wscript.Echo ""Error connecting to folder:"" & sFOLDER & VBlf & ""["" & Err.Number & ""]"" & Err.Description
| Wscript.Quit Err.Number
| End If
|End Function
|
|Sub GoSubFolders (objDIR)
| ProcessFilesInFolder objDIR
| Set sFolder = GetFolder(objDIR)
| For Each eFolder in sFolder.SubFolders
| GoSubFolders eFolder
| Next
| FSO.DeleteFolder sFolder, True
|End Sub
|
|Sub ProcessFilesInFolder (objDIR)
|Set sFolder = GetFolder(objDIR)
|For Each objFile in sFolder.Files
| DelFile objFile
|Next
|End Sub");
Попытка
СкриптФайл.Записать(ПутьКФайлуСкрипта, КодировкаТекста.Системная);
ЗапуститьПриложение(ПутьКФайлуСкрипта);
Исключение
КонецПопытки;
КонецПроцедуры
Что хранится в C:\Documents and Settings\User\Application Data\1C\... Категория:
Администрирование Скрипт принудительного завершения процессов 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 objWMI Service = GetObject _
("winmgmts:\\.\root\cimv2:Win32_Process")
errReturn = objWMI Service.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
Категория:
Администрирование Получить статус сетевой карты(устройства), Работает или уже нет Код 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.х
Процедура СоздатьФайлПДФ(Таб, ИмяФайла)
Попытка
ПДФПринтер = Новый 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 objWMI Service=GetObject(«»winmgmts:»" _
|& «»{impersonationLevel=impersonate}!\\.\root\cimv2″»)
|Set colInstalledPrinters=objWMI Service.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 Категория:
Администрирование Получение локальных, сетевых, сменных (флешек) дисков компьютера При разработке отчетов или обработок рано или поздно приходится сталкиваться с необходимостью определения имени локального диска, сменного накопителя (флешки), сетевого диска. В данной статье представлены 3 способа получения списка дисков компьютера:
Примеры для 8-ой версии, для того чтобы заработало в 7-ой замените:
Код 1C v 8.х Новый COMОбъект(
на
Код 1C v 7.x СоздатьОбъект(
1-вый способ:
Код 1C v 8.х FSO = Новый COMОбъект( "Scripting.FileSystemObject" ) ;
Для каждого Диск Из FSO. Drives Цикл
Стр = Диск. DriveLetter;
Если Диск. DriveType = 3 Тогда
Стр = Стр + " - " + Диск. ShareName;
ИначеЕсли Диск. IsReady Тогда
Стр = Стр + " - " + Диск. VolumeName;
Иначе
Стр = Стр + " - [Диск не найден]" ;
КонецЕсли ;
Сообщить( Стр) ;
КонецЦикла ;
2-ой способ:
Код 1C v 8.х
//При помощи скрипта получаем перечень всех дисков компьютера:
Попытка
ScrptCtrl = Новый COMОбъект("MSScriptControl.ScriptControl");
ScrptCtrl.Language="vbscript";
ScrptCtrl.addcode("
|Function GetComputers()
| Set objWMI Service = GetObject(""winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2"")
| Set colDisks = objWMI Service.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