Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Как через COM-соединение получить значение перечисления? (http://forums.kuban.ru/f1040/kak_cherez_com-soedinenie_poluchit-_znachenie_perechisleniya-9076873.html)

goto8 12.07.2020 18:57

Как через COM-соединение получить значение перечисления?
 
Есть некая 77. Есть УТ 11. Из 77 нужно по КОМ соединиться к УТ и перебрать доки определенного вида. Найти нужные и в 77 породить документы из данных, взятых из УТ.
Вот кусок кода:
БазаТорговли = СоздатьОбъект("V83.COMConnector");
v8 = БазаТорговли.Connect("Srvr="+ИмяСервера+";Ref="+БазаДанных+";Usr="+Пользователь+";Pwd="+Пароль+"");
ЗаявкиУТ = v8.Документы.ЗаказПоставщику;

ДокЗаявкаКОМ = ЗаявкиУТ.Выбрать((РабДата-1), (РабДата+1)); //переберём заявки в УТ
Пока ДокЗаявкаКОМ.Следующий() = -1 Цикл
Контр = ДокЗаявкаКОМ.Контрагент.Наименование;
Сообщить(Контр);
Отдел = ДокЗаявкаКОМ.ОтделОбработки.Идентификатор();
Сообщить(Отдел);
КонецЦикла;
Так вот, Контр - наименование контрагента - показывает отлично, а отдел (ОтделОбработки - суть перечисление) возвращать не хочет, пишет: "Поле агрегатного объекта не обнаружено (Идентификатор)"
Вопрос: как мне программно вытащить значение реквизита ОтделОбработки?

Trinitron 12.07.2020 20:09

а так:
Отдел = ДокЗаявкаКОМ.ОтделОбработки.Наименование

US1C 12.07.2020 21:43

v8.XMLСтрока(ДокЗаявкаКОМ.ОтделОбработки)

goto8 12.07.2020 23:07

[quote=Trinitron;47777160]а так: Отдел = ДокЗаявкаКОМ.ОтделОбработки.Наименование[/quote]
Не, то же самое:
Поле агрегатного объекта не обнаружено (Наименование)

goto8 12.07.2020 23:10

[quote=US1C;47777316]v8.XMLСтрока(ДокЗаявкаКОМ.ОтделОбработки)[/quote]
Фууух! Спасибо, заработало! Но, блин, почему так сложно-то? Где логика? Как понять, когда к реквизиту можно обратиться просто, как в случае с контрагентом, а когда через задний проход?

US1C 12.07.2020 23:17

[quote=ПереходимНа8;47777472]Где логика?[/quote]

Как говорил наш старшина, чтобы солдат ни делал, лишь бы за.бался.

goto8 13.07.2020 00:13

[quote=US1C;47777480]Как говорил наш старшина, чтобы солдат ни делал, лишь бы за.бался.[/quote]
Ну так всё-таки: как понять, когда к реквизиту можно обратиться просто, как в случае с контрагентом, а когда через задний проход?

USSR 13.07.2020 03:28

(6)Понять это не просто, а очень просто. Надо только внимательнее посмотреть на строчку
Контр = ДокЗаявкаКОМ.Контрагент.Наименование;
Наименование имеет строковый тип. Получать напрямую можно только примитивные типы - строка, число. дата. А все остальное уже с дополнительными упражнениями. И не дай бог, если твое наименование контрагента не является уникальным в базе (или в базах)

Trinitron 13.07.2020 06:40

[quote=USSR;47777589]Понять это не просто, а очень просто. Надо только внимательнее посмотреть на строчку Контр = ДокЗаявкаКОМ.Контрагент.Наименование; Наименование имеет строковый тип. Получать напрямую можно только примитивные типы - строка, число. дата. А все остальное уже с дополнительными упражнениями.[/quote]

В этой строке: Отдел = ДокЗаявкаКОМ.ОтделОбработки.Наименование тоже наименование, а вот не сработало, как пишет автор

Billi 13.07.2020 07:06

8-Trinitron >А где ты у перечисления видел свойство "Наименование"?

US1C 13.07.2020 08:45

[quote=ПереходимНа8;47777545]Ну так всё-таки: как понять, когда к реквизиту можно [/quote]

Проверяйте сначала тип значения реквизита, а потом уже получайте его свойства.

USSR 13.07.2020 16:51

Перечисление не является примитивным типом и нет у него свойства "Наименование", никогда не было и не будет )

goto8 13.07.2020 17:33

Про примитивные объекты понял. Спасибо всем, что разъяснили.

Trinitron 14.07.2020 07:16

[quote=Billi;47777644] 8-Trinitron >А где ты у перечисления видел свойство "Наименование"? [/quote]
[quote=USSR;47778631] Перечисление не является примитивным типом и нет у него свойства "Наименование", никогда не было и не будет ) [/quote]
ОК, усвоил

goto8 14.07.2020 11:40

Во, ещё вопрос: как теперь разорвать КОМ-соединение? Как отключиться?

Ткачик 14.07.2020 12:02

[quote=ПереходимНа8;47779854]как теперь разорвать КОМ-соединение? Как отключиться?[/quote] Когда завершится процедура, в которой определена переменная БазаТорговли и эта переменная исчезнет - отключение произойдет автоматически.

Или можно принудительно:

БазаТорговли = "";

goto8 14.07.2020 13:36

[quote=Ткачик;47779895]БазаТорговли = "";[/quote]

принято, спасибо.

Jimbo 14.07.2020 14:31

в мануалах пишут :

БазаТорговли = Неопределено;

но и в (15) сойдёт

goto8 14.07.2020 16:27

[quote=Jimbo;47780174]БазаТорговли = Неопределено;[/quote]
в 77 не прокатит.

Jimbo 14.07.2020 17:35

[quote=ПереходимНа8;47780440] Цитата: Сообщение от Jimbo БазаТорговли = Неопределено; в 77 не прокатит. [/quote]

точно, не сразу понял что из 7 к 8 подключаетесь

USSR 14.07.2020 20:08

Проблема в том, что по моему начиная с 8.3.14 при соединении из 7.7 процесс остаётся в памяти. На 8.3.12 все чудесно работало.

goto8 15.07.2020 01:05

[quote=USSR;47780820]Проблема в том, что по моему начиная с 8.3.14 при соединении из 7.7 процесс остаётся в памяти[/quote]
Какой? УТшный? А почему? Разве при КОМ-соединении запускается полноценный сеанс УТ? Вроде как при ОЛЕ сеанс создаётся.. Или я не прав?

skafandr 28.07.2020 07:58

[quote=Ткачик;47779895] Или можно принудительно: БазаТорговли = ""; [/quote]
Ага,или БазаТорговли = 0;

goto8 03.08.2020 18:18

Ещё вопрос:
теперь понадобилось перебрать в 77 записи регистра сведений. Как к нему подобраться-то?

USSR 03.08.2020 19:16

(23)Точно также как и из самой 8.3, например:
НаборЗаписей = V83.РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();

goto8 03.08.2020 22:27

[quote=USSR;47816473]Точно также как и из самой 8.3, например[/quote]
понял, спасибо.

GariPortman 04.08.2020 08:42

Если обработкой будут пользоваться постоянно, то можно создать общий модуль (например, в расширении) , который будет выполнять действие. А вызывать процедуру из этого модуля и передавать данные по ole из 7.7. Так проще кодить и чем меньше Олька работает тем лучше (ИМХО)

goto8 04.08.2020 09:09

[quote=Begemot;47817010]Так проще кодить[/quote]
Я в этой кухне вызовов 8 из 77 абсолютный профан, так что мне везде кодить непросто. Но совет на заметку возьму, спасибо.
А почему, кстати, ОЛЕ? Речь про КОМ..

USSR 04.08.2020 10:07

(27)если особых наработок нет, которых жалко терять, то попробуй другой подход с использованием HTTP сервиса. Его реализуешь в 8-ой базе, из 7.7 шлешь запрос с параметрам в JSON, обратно получаешь от 8-ки jSON. Разбираешь его и радуешься жизни. Работает очень быстро. Я так переписал экспорт одиночного документа из 7.7 в 8.3 и сбор банковских выписок из нескольких баз 8.3 в 7.7. И забыл про COM. Единственно, что почему то не всегда с первого раза устанавливается соединение с базой, превышается время ожидания. Причем первый раз может не соединиться, а потом просто летает

GariPortman 04.08.2020 10:19

[quote=ПереходимНа8;47817054]ОЛЕ? Речь про КОМ..[/quote]Да без разницы. Тут главное механизм. Просмотрел. Тебе нужно из 8ки в 77 тащить. Тогда проще в обработке кодить.

goto8 04.08.2020 10:43

Блин.. Всё равно затык (

Вот цикл:

НаборЗаписей = V8.РегистрыСведений.ДанныеДляСвязи.СоздатьНаборЗаписей();
НаборЗаписей.Прочитать();

Для Сч = 1 По НаборЗаписей.Количество() Цикл
ТекЗапись = НаборЗаписей.ПолучитьЗапись(Сч);
Сообщить(ТекЗапись.ШтрихКод);
КонецЦикла;

Штрихкод - это текстовый ресурс регистра сведений "ДанныеДляСвязи". Как его прочитать, чёрт бы его побрал?

goto8 04.08.2020 10:44

[quote=Begemot;47817202]Тебе нужно из 8ки в 77 тащить[/quote]
я бы рад.. Но вот на данный момент - такая вот идеология.

Uho 04.08.2020 11:19

[quote=ПереходимНа8;47817281]НаборЗаписей = V8.РегистрыСведений.ДанныеДляСвязи.СоздатьНаборЗап исей(); НаборЗаписей.Прочитать();[/quote]

В чем сакральный смысл вот этих строк?

GariPortman 04.08.2020 11:21

28-USSR >Работает только если база опубликована на веб ?

Uho 04.08.2020 11:44

33-Begemot > если сервис опубликован на веб, база не причем.

US1C 04.08.2020 11:46

[quote=USSR;47817165](27)если особых наработок нет, которых жалко терять, то попробуй другой подход с использованием HTTP сервиса. [/quote]

А можешь код для примера выложить, как на стороне 7-ки и 8-ки это работает?

goto8 04.08.2020 12:00

[quote=Uho;47817418]В чем сакральный смысл вот этих строк?[/quote]
сакрального - никакого. А так - хочу записи из РС прочесть.

goto8 04.08.2020 12:01

[quote=USSR;47817165]запрос с параметрам в JSON[/quote]
JSON тоже планируется. Но это следующим этапом. Пока вот так, через КОМ.

goto8 04.08.2020 13:21

Цикл по записям победил. Спасибо откликнувшимся.

USSR 04.08.2020 15:46

(35)Могу, пиши почту, скину обработку на 7.7 и расширение на 8.3


Текущее время: 00:58. Часовой пояс GMT +3.