Как декодировать (преобразовать) 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С(без ВК и других программ, проверено на ХР/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
Категория:
Полезные, Универсальные Функции Получение локальных, сетевых, сменных (флешек) дисков компьютера При разработке отчетов или обработок рано или поздно приходится сталкиваться с необходимостью определения имени локального диска, сменного накопителя (флешки), сетевого диска. В данной статье представлены 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.х
Попытка
Locator = Новый COMОбъект( "WbemScripting.SWbemLocator" ) ;
Исключение
Сообщить( ОписаниеОшибки( ) ) ;
Возврат ;
КонецПопытки ;
ServicesSet = Locator. ConnectServer( "." ) ;
ObjectSet = ServicesSet. InstancesOf( "Win32_LogicalDisk" ) ;
Для каждого Item Из ObjectSet Цикл
Сообщить( "Имя: " + Item. Caption) ;
Сообщить( "Описание: " + Item. Description) ;
Сообщить( "Файловая система: " + Item. FileSystem) ;
Сообщить( "Свободное место: " + Item. FreeSpace) ;
Сообщить( "Метка диска: " + Item. VolumeName) ;
Сообщить ( "=======================" ) ;
КонецЦикла ;
Автор:
Мигачев Евгений Категория:
COM-объекты, WMI, WSH Пример BAT, CMD файла архивирования БД и записи на DVD Создайте bat или cmd файл с кодом:
Код DOS Batch File
REM Начало
"С:\1С\Bin\1cv7.exe" CONFIG /D "С:\1С\Data\Base_01\" /N"Arc" /P"Arhivator" /M /@ "C:\BackUp\JobList\Job_01.txt"
REM Это запуск пакетного задания в конфигураторе
"C:\Program Files\WinRAR\Rar.exe" u -r -y -ep1 -ag["YYYY.MM.DD"] -m5 E:\Archive_1C\Rar\Backup_1C.rar "E:\BackUp_1C\" >>E:\BackUp\Log\LogArhive.log
REM УпаковкаWinRARом, добавление даты архивирования, если база одна, то можно и не упаковывать
"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
REM Запись архива в NERO.cmd на DVD
REM Все...
И в Панели управления - назначенные задания - добавьте задание - Выберите созданный файл и укажите время запуска
Категория:
Администрирование Как упаковать файловую базу архиватором rar Категория:
Администрирование