Имя: Пароль:
1C
1С v8
Копаю взаимодействие VBS и 8.2
0 Aerosol
 
22.12.13
00:35
Друзья, доброго времени суток, подскажите, пожалуйста, как быть:

Мне в итоге нужно написать скриптец vbs, который создает V82.Application.
С синтаксисом и прочим более-менее разобрался. Подскажите, я немного не догоняю: такое ощущение, что vbs не воспринимает кириллицу. Вот код, я упрощу его до минимума:

    Dim trade
    Dim Tovar
    Dim Gruppa
    Set trade = CreateObject("V82.Application")
    trade.Connect("File=""C:\Users\абк\Documents\InfoBase"";Usr=""Администратор"";")
    Set Tovar = trade.Справочники.СотрудникиОрганизаций
    Set Gruppa = Товар.СоздатьГруппу()
    Gruppa.Наименование = "Группа"
    Gruppa.Записать()

Ругается сразу на 7 строчку, мол, недопустимый знак. Как я понимаю, ругается на кириллицу ? Как быть тогда ? Как обращаться к 1сным метаданнысм, если Справочники.СотрудникиОрганизаций не воспринимается ? Или я неправ, и не в том ошибка ?

Помогайте ..
1 Aerosol
 
22.12.13
00:36
Извиняюсь, в 7 строчке вместо Товар Tovar. Все равно ругается.
2 Aerosol
 
22.12.13
00:37
И не на 7, а на 6 строчку. Все перепутал :)
3 Classic
 
22.12.13
00:37
У 1сных методов есть англоязычные аналоги. Кури СП
4 Dmitry1c
 
22.12.13
00:38
А что скрипт должен делать? Может лучше написать на каком-нибудь .NET'е?
5 Питерский_
Никола
 
22.12.13
00:39
А че за ошибка ? Текст ошибки, военная тайна ?
6 Aerosol
 
22.12.13
00:39
(3) Да это понятно с методами. А как обращаться к самим метаданным ? Типа, к справочнику ?
7 Aerosol
 
22.12.13
00:39
Ошибка: недопустимый знак.
8 Aerosol
 
22.12.13
00:40
(4)
Да скрипт простой. Просто нужно освоить именно это технологию, приказ начальства. Вот и сижу.
9 Classic
 
22.12.13
00:41
(6)
Как ты понимаешь, кирилица воспринимается, иначе 5 сторка бы заругалась. Потому попробуй обращаться через квадратные скобки
10 ДенисЧ
 
22.12.13
00:43
кодировка?
11 Classic
 
22.12.13
00:45
trade.Catalogs["СотрудникиОрганизаций"]
12 Aerosol
 
22.12.13
00:46
(9) Так ругается на 6 строчку, там нет вызова 1сного метода никакого.
13 Aerosol
 
22.12.13
00:46
(11) Сейчас попробую
14 Aerosol
 
22.12.13
00:48
(11) Не-а, все равно ошибка :( И в интернете нигде не найти примера работы такого .. :(
15 Aerosol
 
22.12.13
00:48
(10) Кодировка стандартная, Винда 7-ка 64 стоит. Скрипт пишу в обычном блокноте
16 Classic
 
22.12.13
00:49
(14)
Ошибка та же?
17 Aerosol
 
22.12.13
00:50
(16) Да, та же. Недопустимый знак
18 Aerosol
 
22.12.13
00:52
Может, надо делать через ComConnector ?
19 Classic
 
22.12.13
00:57
(17)
Странно. У меня ошибка другая :)
(18)
Ну попробуй. Тебе все равно формы открывать не надо, параметры сеанса тоже не нужны
20 Aerosol
 
22.12.13
00:57
Dim trade
Dim Tovar
Dim Gruppa
Dim Element
Set Con = CreateObject("v82.COMConnector")
Set v8 =Con.Connect("File=""C:\Users\абк\Documents\InfoBase"";Usr=""Администратор"";")
Set Tovar = v8.Справочники.СотрудникиОрганизаций
Set Gruppa = Tovar.СоздатьГруппу()
Gruppa.Наименование = "Группа"
Gruppa.Записать()


переписал, а толку 0. все равно ругается сразу на строчку v8.Справочники.СотрудникиОрганизаций, на первую букву С
21 Aerosol
 
22.12.13
01:01
Был бы у кого-нибудь рабочий пример скрипта какого-нибудь ..
22 Питерский_
Никола
 
22.12.13
01:03
(20) Ну метаданные точно на английском лабай, да и для теста в 1С создай на енглише сам справочник !
23 Aerosol
 
22.12.13
01:09
Нашел интересный момент :) Скрипты под 64 запускаются корректно только через cmd а там:
C:\Windows\SysWOW64\cscript.exe C:\1.vbs

По-другому ругалось.

Запустил простейший скрипт, не требующий работы с метаданными:

Dim obj
Dim con
Set obj = CreateObject("V82.COMConnector")
Set con = obj.Connect("File=""C:\Users\абк\Documents\InfoBase"";Usr=""Администратор"";")
msgbox(con.metadata.version)

Он вернул значение, все норм. Уже хорошо.
24 Aerosol
 
22.12.13
01:11
Но по-прежнему ругается на недопустимый знак. Что ж такое :(
25 Classic
 
22.12.13
01:16
Dim trade
    Dim Tovar
    Dim Gruppa
    Set trade = CreateObject("V82.Application")
    trade.Connect("File=""C:\Users\абк\Documents\InfoBase"";Usr=""Администратор"";")
    Tovar  = getattr(trade.Catalogs, "СотрудникиОрганизаций")
    Gruppa = Tovar.GreatGroup()
    setattr(Gruppa,"Наименование", "Группа")
    Gruppa.Save()

На setattr ругается, но дальше уже сам, ок?
26 Aerosol
 
22.12.13
01:16
Никто меня идеей не спасет ?:( Вдруг кто сталкивался ..
27 Aerosol
 
22.12.13
01:16
(25) Да, буду пробовать сейчас, спасибо !
28 Classic
 
22.12.13
01:17
(27)
CreateFolder сори
29 Classic
 
22.12.13
01:18
Ну и
#coding=cp1251
не забудь
30 sda553
 
22.12.13
01:19
getattr юзай
31 Aerosol
 
22.12.13
01:20
(29) #coding=cp1251 - именно так ? Это ж не питон ...
32 Torquader
 
22.12.13
01:26
Не мучайте VbScript - он не поймёт русский язык, как бы вы его не заставляли - для него переменные только латиница.
Конечно, можно сделать "переменную" из всего, что вводится, но для этого её нужно заключить в квадратные скобки.

Dim trade
    Dim Tovar
    Dim Gruppa
    Set trade = CreateObject("V82.Application")
    trade.Connect("File=""C:\Users\абк\Documents\InfoBase"";Usr=""Администратор"";")
    Set [Tovar] = trade.[Справочники].[СотрудникиОрганизаций]
    Set Gruppa = [Товар].[СоздатьГруппу]()
    Gruppa.[Наименование] = "Группа"
    Gruppa.[Записать]()

Если так не "проглотит", то значит, что по OLE русские методы просто недоступны.
33 Aerosol
 
22.12.13
01:32
(32) Блин, мне кажется, что это может сработать. Ошибки не выкинул, значит, глотает. Правда, группа все равно не создалась, но я попробую поэкспериментировать !

Спасибо большое за подсказку !
34 Torquader
 
22.12.13
01:36
(33) У меня где-то работало так:
Dim [1]
[1]=2
Echo [1]

P.S. а не сработало потому, что
Set [Tovar]

Set Gruppa = [Товар].[СоздатьГруппу]()

совершенно разные переменные!!!

Уж переменные лучше все писать латиницей, чтобы VbScript-у было приятнее, а у программиста не возникало путаницы.
35 Aerosol
 
22.12.13
01:42
(34) Работает, простейшим скриптом я получил наименование элемента по коду.
    Dim trade
    Dim Tovar
    Dim Gruppa
    Dim Elem
    Dim Naim    
    Set trade = CreateObject("V82.Application")
    trade.Connect("File=""C:\Users\абк\Documents\InfoBase"";Usr=""Администратор"";")
    Set [Tovar] = trade.[Справочники].[СотрудникиОрганизаций]
    Set Gruppa = [Tovar].[НайтиПоКоду]("0000000002")
    Set Elem = [Gruppa].[ПолучитьОбъект]()
    Naim = [Elem].[Наименование]
    MsgBox Naim
36 Aerosol
 
22.12.13
01:43
(34) Спасибо тебе большое, дружище :) Все, теперь вопросов нет.

Думаю, дальше проблем в рабочем процессе не будет. Теперь смогу наваять, что потребуется.
37 Aerosol
 
22.12.13
01:44
(34) Мелочь, а приятно, что добились совместными усилиями :)

Я так же был рад в свое время, когда первый запрос на 7ке 1с++ заработал :)
38 Aerosol
 
22.12.13
01:57
Один вопрос неразрешенным остался. Все, что надо, получаю.

но некоторые переменные со значениями не выводятся msgbox.

Их, может, как-то преобразовывать надо по типам ?
39 Aerosol
 
22.12.13
02:06
А, не, встала проблема.

Как использовать методы 1сные в скрипте ? Например, Строка() ?
40 Aerosol
 
22.12.13
02:11
Есть кто живой из дискуссии ? У кого какие соображения ?
41 Reaper_1c
 
22.12.13
05:38
Объект не тот...
42 makfromkz
 
22.12.13
15:21
(35)я из любопытства запустил vbs из(35) на ноуте с вин7-64
получил ошибку:
Строка: 6
Символ: 1
Ошибка: Невозможно создание объекта контейнером ActiveX:
'V82.Application'
Код:  *00A01AD
Источник: Ошибка выполнения Microsoft VBScript
43 makfromkz
 
22.12.13
15:26
(42)Это связано с 64-битностью вин7 ?
44 makfromkz
 
22.12.13
16:00
поискав на мисте, нашел мысль про глюкавость 1С82, и перешел на 1С81.
О чудо!!! добрался до результата msgbox   :)
45 Torquader
 
22.12.13
17:26
(42) Так на 64-битной системе нужно запускать WScript из 32-битной версии, тогда 32-битные объекты будут создаваться.
Сейчас не помню, как это запускается, но поиск на MSDN сразу выдал правильный ответ.

(39) Метод Строка, насколько я помню, работает как
trade.String, а все встроенные перечисления можно из этого объекта получать.
Кроме того, не забываем, что при выводе в строку все объекты 1С нужно явно преобразовывать к типам, которые VbScript понимает, так как VariantChangeType про типы 1С не знает, и есть вероятность увидеть просто "Object"
46 Torquader
 
22.12.13
17:27
(44) Кстати, там есть Connector, который позволяет не создавать интерфейсную часть, а иметь доступ только к данным.

Удачи.
P.S. Единственное, что не удалось сделать в VbScript - это строчную константу с переводом строки внутри.
47 makfromkz
 
22.12.13
18:15
(45) изменяя в скрипте с "V82"  на "V81"  мы получаем работающий скрипт, дык  wscript  вызывается системой по расширению  VBS - откуда ей знать скольки-битную версию  wscript вызывать ????
48 Torquader
 
22.12.13
18:25
(47) Если посмотреть в реестре, на расширение Vbs, то можно узнать, что запускается
WScript.exe %*
Если в командной строке вызвать нужный WScript.exe и "скормить" ему наш файл, то случиться чудо - заработает именно та версия.

%windir%\SysWoW64\WScript.exe File.vbs должно решить проблему.

P.S. никто сам искать не хочет - ну прям котята - пока в молоко не ткнёшь, "работать" не будут.
49 makfromkz
 
22.12.13
18:41
пока я скормил 32-битному wscript - не пашет - перехожу на 64-битный, пока скармливал, появился ваш (48) пост  )))
50 makfromkz
 
22.12.13
18:49
увы, и 64-битный  wscript  выдал ту же ошибку:
Ошибка: Невозможно создание объекта контейнером ActiveX:
'V82.Application'
Код:  *00A01AD
Источник: Ошибка выполнения Microsoft VBScript

так, что (скорее всего)прав форумчанин, который говорил на одной из тутошних веток, про наличие множественных версий 1С82(а может и 1С83 под ногами мешается).
Ибо с 1С81 все заводится с полпинка
51 iamnub
 
23.12.13
03:36
(0)
Ломись сразу к скулю, будь мужиком!!
52 Torquader
 
24.12.13
21:58
(50) Если версий много, то нужно последнюю версию "регистрировать" в реестре - можно туда заглянуть и "вручную" поправить.

Просто у меня сейчас под рукой 64-бит нету, чтобы запустить из под неё 1С - если будет, попробую, но, там, где я делал обмен, V82.Connector работал и без "танцев с бубном".