|
Копаю взаимодействие 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 работал и без "танцев с бубном". |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |