powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / [игнор отключен] [закрыт для гостей] / ComConnector из VBA
4 сообщений из 4, страница 1 из 1
ComConnector из VBA
    #35032241
1chainik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гм. где бы поиметь побольше примеров дергания 1C.Application-а извне, желательно -из VBA

а то поиск по форуму дает только одну ссылку
http://www.sql.ru/forum/actualthread.aspx?tid=348199&pg=3&hl=comconnector
а этого маловато. контекста уже обчитался. 4 тома руководства тоже не радуют изяществом изложения.


например хотелось бы в вба (т.к. предполагается формы в т.ч. редактирования внешних данных - соответствий данных внешней приблуды и данных 1С, и рисовать их в 1С не хотелось бы - т.ч. смотрю, что и как можно дергать из Аксесс-а) иметь фрагменты, аналогичные такому коду:
Код: plaintext
Если ФЛ =  СпрФЛ.ПустаяСсылка() Тогда
но для вба ни IN ни "=" не сработают.

или
Код: plaintext
Орг.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо;

но боюсь тут с Set может не прокатить (проверю еще).

вот пока наблюл следующие способы сравнений и т.п.:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Function Test_v81()
Dim v, u
Dim x
    Set v = prpV81.a81 'тип - ComConnector.Connect "xxxx", т.е. "почти Application"
    'Debug.Print v.Перечисления.ЮрФизЛицо.ЮрЛицо
    Set u = v.Catalogs.Организации '.Select()
    Stop
    Debug.Print u.НайтиПоНаименованию("Наша организация", False).Наименование
    Debug.Print v.ЗначениеВСтрокуВнутр(u.НайтиПоНаименованию("Наша организация", False)) _
            = v.ЗначениеВСтрокуВнутр(u.НайтиПоНаименованию("Наша организация", False))
    Debug.Print v.ЗначениеВСтрокуВнутр(u.НайтиПоНаименованию("нетнихератакойорганизации", False)) _
            = v.ЗначениеВСтрокуВнутр(u.ПустаяСсылка)
    'Debug.Print v.Перечисления.ЮрФизЛицо.ЮрЛицо 'низзя
    Set u = v.Перечисления.ЮрФизЛицо '.ЮрЛицо
    'Set u = v.Перечисления.ЮрФизЛицо("ЮрЛицо") 'низзя
    For Each x In u
        'Debug.Print x '.Получить() '.ПолноеИмя '.Метаданные '.Data '.Value  
        Debug.Print v.ЗначениеВСтрокуВнутр(x)
    Next x
    Set v = Nothing
    Stop
    Set prpV81.a81 = Nothing
    Set prpV81.c81 = Nothing 'тип - ComConnector
End Function
громозеково, как-то, имхо.
...
Рейтинг: 0 / 0
ComConnector из VBA
    #35033366
1chainik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
продолжу:

в 1С можно пользоваться своеобразным неявным преобразованием типов.
Например я пишу в обработке:
Код: plaintext
С_ссылка = кнтр.Ссылка.УникальныйИдентификатор();
а потом присваиваю С_ссылка текстовому полю некоего ДАО-рекордсета. Ошибки не происходит, и полю присваивается что-то типа
f7f23706-9c35-11dc-1696-0011951bfe4a

в VBA кнтр.Ссылка.УникальныйИдентификатор() - объектный тип, и неявное преобразование в строку не происходит, а возникает ошибка (отсутствие умолчательного св-ва).
если же взять от него
Код: plaintext
1.
2.
3.
?.ЗначениеВСтрокуВнутр(ФЛ.УникальныйИдентификатор())
{"#",fc01b5df-97fe-449b-83d4-218a090e681e,9c0c29de-9c39-11dc- 1696 -0011951bfe4a}
?.ЗначениеВСтрокуВнутр(ФЛ)
{"#",fb97f9cf- 7053 - 4184 -ac5d-ca3d81b0fb83, 62 :16960011951bfe4a11dc9c399c0c29de}
(зд. ФЛ - типа СправочникСсылка)
вот сиди и думай - что из 3-х может оказаться той строкой, которую я присваивал из 1С невным преобразованием. И правильно ли будет его попросту выпарсить из такой строки?
и вообще, как получить в vba те неявные преобразования, которые 1С выполняет сам, без ансамбля.

может быть кто-то что-то подскажет???
...
Рейтинг: 0 / 0
ComConnector из VBA
    #35033592
1chainik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ждёмс



зы. пока методом тыка пришел к такому решению (выделения строки уид из 1С-уида):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Public Function СтрокаУид(Obj1C As Object, Ууид1С As Object)
Dim С_Ссылка As String
Dim pos As Long
    С_Ссылка = Obj1C.ЗначениеВСтрокуВнутр(Ууид1С)
    Do While True
        pos = InStr( 1 , С_Ссылка, ",")
        If pos =  0  Then Exit Do
        С_Ссылка = Mid(С_Ссылка, pos +  1 )
    Loop
    С_Ссылка = Left(С_Ссылка, Len(С_Ссылка) -  1 )
    СтрокаУид = С_Ссылка
End Function
но оно кажется отнюдь не лучшим, хотя, пока, совпадает на все 100. (для 3-х справочников, и 2000 записей).
...
Рейтинг: 0 / 0
ComConnector из VBA
    #35039441
1chainik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
жаль, не нашлось сочуствующих.

копаемся дальше:
1chainik
Код: plaintext
Орг.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо;

но боюсь тут с Set может не прокатить (проверю еще).гм. что прелестно:
хотя
Код: plaintext
?.Перечисления.ЮрФизЛицо.ФизЛицо
- дает ошибку, но присвоение в стиле
Код: plaintext
Орг.ЮрФизЛицо = .Перечисления.ЮрФизЛицо.ЮрЛицо
таки проходят в ВБА, т.е. безо всякого Set (т.е., похоже, Let-ится, и скорее похоже на запись, чем на объект) неожиданно. Кстати с Set не ругается, но присвоения, с т.з. 1С не происходит
Код: plaintext
1.
2.
                        '//Орг.ЮрФизЛицо = "\256Nby\313y\304*M\223\007yM\371v\032";
                        'Set Орг.ЮрФизЛицо = .Перечисления.ЮрФизЛицо.ЮрЛицо
                        Орг.ЮрФизЛицо = .Перечисления.ЮрФизЛицо.ЮрЛицо
такоже и с прочими "объектными" полями 1С объектов. Присвоение полям (но не объектным переменным самого вба) объекта 1С производится банальным "=" (т.е. вба-ным Let-ом, а не Set-ом).

остался вопрос, как докопаться до ошибки 1С изнутри вба-ного кода . (и можно ли - т.е. достижима ли она через ComConnector)
Попытки получить
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
....
Dim v8 As Object
    Set v8 = c81.Connect strConnection
With v8
     .....
     .....
     .....
     If Err<>  0  Then
          .....
              Debug.Print .ИнформацияОбОшибке.Описание &  " " & .ИнформацияОбОшибке.Причина
              'Debug.Print .ИнформацияОбОшибке().Описание &  " " & .ИнформацияОбОшибке().Причина
     End If
     .....
     .....
End With
с наскока не проходит.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / ComConnector из VBA
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]