Переключение на Главную Страницу Страницы: [1] 2 3 4 ОтправитьПечать
Очень популярная тема (более 25 ответов) Передача параметров в VBScript (число прочтений - 30610 )
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Передача параметров в VBScript
19. Марта 2008 :: 12:44
Печать  
Наверно для кого-то не станет открытием (для меня стало), что интерпретатор VBScript работает быстрее интерпретатора 1С 7.7. Например, простейшая операция A=(2+5)/10 прокрученная в цикле 1000000 раз, выполняется в 1С в 4.5 раза дольше. Соответственно возникает мысль определенные участки кода писать на VBScript, а не на 1С. Как я это делаю сейчас:

Код
Выбрать все
	ТекстСкрипта="
	|Sub Main
	|I=0
	|Do
	|   A=(2+5)/10
	|   I=I+1
	|Loop While I<1000001
	|End Sub
	|";
	VBS=СоздатьОбъект("MSScriptControl.ScriptControl");
	VBS.Language="vbscript";
	VBS.AddCode(ТекстСкрипта);
	VBS.Run("Main");
 



Но у меня возник вопрос: как (не извращаясь со встраиванием строковых значений в модуль скрипта) передать в скрипт несколько параметров из 1С и вернуть из скрипта несколько результатов. Можно конечно через файл, но это уже явный изврат. И кроме того вопрос: если можно передать в скрипт значения, то только простых типов (дата, число, строка) или все-таки можно передавать сложные (типа массивов) и агрегатные типы?
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Передача параметров в VBScript
Ответ #1 - 19. Марта 2008 :: 12:51
Печать  
Надеюсь, что ты направляешь свои усилия по оптимизации именно в те участки кода, где подобная работа даст максимальную отдачу.
Надеюсь, что для тебя не будет открытием тот факт, что самыми продолжительными операциями в 1С являются операции с данными.
  
Наверх
www  
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Передача параметров в VBScript
Ответ #2 - 19. Марта 2008 :: 13:06
Печать  
Конечно, именно в те участки. Улыбка
Играюсь с библиотекой GfFlAx, оказывается с ее помощью можно такие обалденные графики строить прямо на форме! Вот только методов для рисования в этой библиотечке маловато - круг, прямоугольник, точка, линия... Но имея даже только метод вывода точки, можно делать красивые графики, например рэйтрэйсингом. Улыбка А уж всякие там градиенты и т.п. делаются на раз. Начал вспоминать что такое синусы с косинусами и операции над матрицами (для создания 3D-графиков с произвольной конструкцией, положением и освещением). Вот только объем подобных вычислений уж очень большой, и разница VBScript с 1С может достигать двух порядков. Но красиво блин...
Ну так подскажет кто-нибудь как параметры в скрипт загонять/получать?
  

screen_003.jpg ( 34 KB | Загрузки )
screen_003.jpg
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Передача параметров в VBScript
Ответ #3 - 19. Марта 2008 :: 13:26
Печать  
Ну есть метод AddObject(Name, Object, [AddMembers]), для ActiveX объектов работает, дла простых переменных не пробовал
  
Наверх
ICQ  
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: Передача параметров в VBScript
Ответ #4 - 19. Марта 2008 :: 13:38
Печать  
Цитата:
Ну так подскажет кто-нибудь как параметры в скрипт загонять/получать?

Загонять как обычно.
МойСкрипт.vbs -Первый -Второй

Внутри
If WScript.Arguments(1) и т.д.
  
Наверх
ICQ  
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Передача параметров в VBScript
Ответ #5 - 19. Марта 2008 :: 13:44
Печать  
Ну если вы заметили, я не загоняю скрипт в файл. Кроме того в командной строке не очень-то уж много и передашь. Как например массив передать 1000х1000?
  
Наверх
 
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: Передача параметров в VBScript
Ответ #6 - 19. Марта 2008 :: 13:53
Печать  
maljaev писал(а) 19. Марта 2008 :: 13:44:
Ну если вы заметили, я не загоняю скрипт в файл. Кроме того в командной строке не очень-то уж много и передашь. Как например массив передать 1000х1000?

А... Не дочитал.
Тогда вообще непонятно. Ну формируй текст скрипта средствами 1С. Надеюсь, не самые большие потери при этом будут.
  
Наверх
ICQ  
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Передача параметров в VBScript
Ответ #7 - 19. Марта 2008 :: 13:58
Печать  
Ну хорошо, пусть формировать текст скрипта. Но ведь загнать массив 1000х1000 в текст скрипта тоже не шибко быстро будет, кроме того какого же размера будет скрипт? При его выполнении WSH тормозить не будет?
  
Наверх
 
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: Передача параметров в VBScript
Ответ #8 - 19. Марта 2008 :: 14:08
Печать  
maljaev писал(а) 19. Марта 2008 :: 13:58:
Ну хорошо, пусть формировать текст скрипта. Но ведь загнать массив 1000х1000 в текст скрипта тоже не шибко быстро будет, кроме того какого же размера будет скрипт? При его выполнении WSH тормозить не будет?

ХЗ. А что, в WSH есть специальные методы для обработки именно массивов?
  
Наверх
ICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Передача параметров в VBScript
Ответ #9 - 19. Марта 2008 :: 14:09
Печать  
maljaev писал(а) 19. Марта 2008 :: 13:58:
Ну хорошо, пусть формировать текст скрипта. Но ведь загнать массив 1000х1000 в текст скрипта тоже не шибко быстро будет, кроме того какого же размера будет скрипт? При его выполнении WSH тормозить не будет?

Создай какойнить ActiveX контейнер. Заполни его через 1с а потом добавь этот объект в скрипт
  
Наверх
ICQ  
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Передача параметров в VBScript
Ответ #10 - 19. Марта 2008 :: 14:14
Печать  
Nick писал(а) 19. Марта 2008 :: 14:09:
maljaev писал(а) 19. Марта 2008 :: 13:58:
Ну хорошо, пусть формировать текст скрипта. Но ведь загнать массив 1000х1000 в текст скрипта тоже не шибко быстро будет, кроме того какого же размера будет скрипт? При его выполнении WSH тормозить не будет?

Создай какойнить ActiveX контейнер. Заполни его через 1с а потом добавь этот объект в скрипт

Будь добр, поподробнее на этот счет. Можно в виде участка кода (ну с десяток значений загнать).
  
Наверх
 
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: Передача параметров в VBScript
Ответ #11 - 19. Марта 2008 :: 14:20
Печать  
Сомневаюсь, что будет быстрее сформировать массив средствами 1С, а потом его перебирать For each.
Лучше уж формировать текст скрипта.
Хотя, имхо.
  
Наверх
ICQ  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Передача параметров в VBScript
Ответ #12 - 21. Марта 2008 :: 07:47
Печать  
При попытке засунуть в скрипт встроенный в 1С объект (типа ТЗ, СЗ и др.) через AddObject получишь ошибку "плохой тип переменной".
Обходится с помощью ObjRef-сериализации.
пример кода:
Код
Выбрать все
	e=СоздатьОбъект("Addin.EventProxy");
	Scr=СоздатьОбъект("MSScriptControl.ScriptControl");
	scr.Language="vbscript";
	т=СоздатьОбъект("ТаблицаЗначений");
	Т.НоваяКолонка("t1");
	Т.НоваяСтрока();
	Т.t1 = 111;
	Scr.AddCode("
	|Function TestVT
	|Set v=GetObject("""+e.Сериализовать(т)+""")
	|v.SelectLines()
	|v.GetLine()
	|TestVT=v.t1
	|End Function");
	Сообщить(Scr.Eval("TestVT()"));
 


в строке сообщений выводится "111", как и ожидаемо Улыбка
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Передача параметров в VBScript
Ответ #13 - 21. Марта 2008 :: 07:58
Печать  
steban писал(а) 21. Марта 2008 :: 07:47:
При попытке засунуть в скрипт встроенный в 1С объект (типа ТЗ, СЗ и др.) через AddObject получишь ошибку "плохой тип переменной".
Обходится с помощью ObjRef-сериализации.

Это куда-нибудь в ФАК нужно занести, ведь Степан не всегда под рукой Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Передача параметров в VBScript
Ответ #14 - 21. Марта 2008 :: 08:16
Печать  
artbear писал(а) 21. Марта 2008 :: 07:58:
steban писал(а) 21. Марта 2008 :: 07:47:
При попытке засунуть в скрипт встроенный в 1С объект (типа ТЗ, СЗ и др.) через AddObject получишь ошибку "плохой тип переменной".
Обходится с помощью ObjRef-сериализации.

Это куда-нибудь в ФАК нужно занести, ведь Степан не всегда под рукой Улыбка


А в 1с++ этот функционал перенести нельзя?
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 4
ОтправитьПечать