К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Как через COM-соединение получить значение перечисления?

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

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



1 - 12.07.2020 - 20:09
а так:
Отдел = ДокЗаявкаКОМ.ОтделОбработки.Наименование
Гость
2 - 12.07.2020 - 21:43
v8.XMLСтрока(ДокЗаявкаКОМ.ОтделОбработки)
Гость
3 - 12.07.2020 - 23:07
Цитата:
Сообщение от Trinitron Посмотреть сообщение
а так: Отдел = ДокЗаявкаКОМ.ОтделОбработки.Наименование
Не, то же самое:
Поле агрегатного объекта не обнаружено (Наименование)
Гость
4 - 12.07.2020 - 23:10
Цитата:
Сообщение от US1C Посмотреть сообщение
v8.XMLСтрока(ДокЗаявкаКОМ.ОтделОбработки)
Фууух! Спасибо, заработало! Но, блин, почему так сложно-то? Где логика? Как понять, когда к реквизиту можно обратиться просто, как в случае с контрагентом, а когда через задний проход?
Гость
5 - 12.07.2020 - 23:17
Цитата:
Сообщение от ПереходимНа8 Посмотреть сообщение
Где логика?
Как говорил наш старшина, чтобы солдат ни делал, лишь бы за.бался.
Гость
6 - 13.07.2020 - 00:13
Цитата:
Сообщение от US1C Посмотреть сообщение
Как говорил наш старшина, чтобы солдат ни делал, лишь бы за.бался.
Ну так всё-таки: как понять, когда к реквизиту можно обратиться просто, как в случае с контрагентом, а когда через задний проход?
Гость
7 - 13.07.2020 - 03:28
(6)Понять это не просто, а очень просто. Надо только внимательнее посмотреть на строчку
Контр = ДокЗаявкаКОМ.Контрагент.Наименование;
Наименование имеет строковый тип. Получать напрямую можно только примитивные типы - строка, число. дата. А все остальное уже с дополнительными упражнениями. И не дай бог, если твое наименование контрагента не является уникальным в базе (или в базах)
8 - 13.07.2020 - 06:40
Цитата:
Сообщение от USSR Посмотреть сообщение
Понять это не просто, а очень просто. Надо только внимательнее посмотреть на строчку Контр = ДокЗаявкаКОМ.Контрагент.Наименование; Наименование имеет строковый тип. Получать напрямую можно только примитивные типы - строка, число. дата. А все остальное уже с дополнительными упражнениями.
В этой строке: Отдел = ДокЗаявкаКОМ.ОтделОбработки.Наименование тоже наименование, а вот не сработало, как пишет автор
9 - 13.07.2020 - 07:06
8-Trinitron >А где ты у перечисления видел свойство "Наименование"?
Гость
10 - 13.07.2020 - 08:45
Цитата:
Сообщение от ПереходимНа8 Посмотреть сообщение
Ну так всё-таки: как понять, когда к реквизиту можно
Проверяйте сначала тип значения реквизита, а потом уже получайте его свойства.
Гость
11 - 13.07.2020 - 16:51
Перечисление не является примитивным типом и нет у него свойства "Наименование", никогда не было и не будет )
Гость
12 - 13.07.2020 - 17:33
Про примитивные объекты понял. Спасибо всем, что разъяснили.
13 - 14.07.2020 - 07:16
Цитата:
Сообщение от Billi Посмотреть сообщение
8-Trinitron >А где ты у перечисления видел свойство "Наименование"?
Цитата:
Сообщение от USSR Посмотреть сообщение
Перечисление не является примитивным типом и нет у него свойства "Наименование", никогда не было и не будет )
ОК, усвоил
Гость
14 - 14.07.2020 - 11:40
Во, ещё вопрос: как теперь разорвать КОМ-соединение? Как отключиться?
15 - 14.07.2020 - 12:02
Цитата:
Сообщение от ПереходимНа8 Посмотреть сообщение
как теперь разорвать КОМ-соединение? Как отключиться?
Когда завершится процедура, в которой определена переменная БазаТорговли и эта переменная исчезнет - отключение произойдет автоматически.

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

БазаТорговли = "";
Гость
16 - 14.07.2020 - 13:36
Цитата:
Сообщение от Ткачик Посмотреть сообщение
БазаТорговли = "";
принято, спасибо.
Гость
17 - 14.07.2020 - 14:31
в мануалах пишут :

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

но и в (15) сойдёт
Гость
18 - 14.07.2020 - 16:27
Цитата:
Сообщение от Jimbo Посмотреть сообщение
БазаТорговли = Неопределено;
в 77 не прокатит.
Гость
19 - 14.07.2020 - 17:35
Цитата:
Сообщение от ПереходимНа8 Посмотреть сообщение
Цитата: Сообщение от Jimbo БазаТорговли = Неопределено; в 77 не прокатит.
точно, не сразу понял что из 7 к 8 подключаетесь
Гость
20 - 14.07.2020 - 20:08
Проблема в том, что по моему начиная с 8.3.14 при соединении из 7.7 процесс остаётся в памяти. На 8.3.12 все чудесно работало.
Гость
21 - 15.07.2020 - 01:05
Цитата:
Сообщение от USSR Посмотреть сообщение
Проблема в том, что по моему начиная с 8.3.14 при соединении из 7.7 процесс остаётся в памяти
Какой? УТшный? А почему? Разве при КОМ-соединении запускается полноценный сеанс УТ? Вроде как при ОЛЕ сеанс создаётся.. Или я не прав?
Гость
22 - 28.07.2020 - 07:58
Цитата:
Сообщение от Ткачик Посмотреть сообщение
Или можно принудительно: БазаТорговли = "";
Ага,или БазаТорговли = 0;
Гость
23 - 03.08.2020 - 18:18
Ещё вопрос:
теперь понадобилось перебрать в 77 записи регистра сведений. Как к нему подобраться-то?
Гость
24 - 03.08.2020 - 19:16
(23)Точно также как и из самой 8.3, например:
НаборЗаписей = V83.РегистрыСведений.ЦеныНоменклатуры.СоздатьНабор Записей();
Гость
25 - 03.08.2020 - 22:27
Цитата:
Сообщение от USSR Посмотреть сообщение
Точно также как и из самой 8.3, например
понял, спасибо.
26 - 04.08.2020 - 08:42
Если обработкой будут пользоваться постоянно, то можно создать общий модуль (например, в расширении) , который будет выполнять действие. А вызывать процедуру из этого модуля и передавать данные по ole из 7.7. Так проще кодить и чем меньше Олька работает тем лучше (ИМХО)
Гость
27 - 04.08.2020 - 09:09
Цитата:
Сообщение от Begemot Посмотреть сообщение
Так проще кодить
Я в этой кухне вызовов 8 из 77 абсолютный профан, так что мне везде кодить непросто. Но совет на заметку возьму, спасибо.
А почему, кстати, ОЛЕ? Речь про КОМ..
Гость
28 - 04.08.2020 - 10:07
(27)если особых наработок нет, которых жалко терять, то попробуй другой подход с использованием HTTP сервиса. Его реализуешь в 8-ой базе, из 7.7 шлешь запрос с параметрам в JSON, обратно получаешь от 8-ки jSON. Разбираешь его и радуешься жизни. Работает очень быстро. Я так переписал экспорт одиночного документа из 7.7 в 8.3 и сбор банковских выписок из нескольких баз 8.3 в 7.7. И забыл про COM. Единственно, что почему то не всегда с первого раза устанавливается соединение с базой, превышается время ожидания. Причем первый раз может не соединиться, а потом просто летает
29 - 04.08.2020 - 10:19
Цитата:
Сообщение от ПереходимНа8 Посмотреть сообщение
ОЛЕ? Речь про КОМ..
Да без разницы. Тут главное механизм. Просмотрел. Тебе нужно из 8ки в 77 тащить. Тогда проще в обработке кодить.
Гость
30 - 04.08.2020 - 10:43
Блин.. Всё равно затык (

Вот цикл:

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

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

Штрихкод - это текстовый ресурс регистра сведений "ДанныеДляСвязи". Как его прочитать, чёрт бы его побрал?
Гость
31 - 04.08.2020 - 10:44
Цитата:
Сообщение от Begemot Посмотреть сообщение
Тебе нужно из 8ки в 77 тащить
я бы рад.. Но вот на данный момент - такая вот идеология.
Uho
32 - 04.08.2020 - 11:19
Цитата:
Сообщение от ПереходимНа8 Посмотреть сообщение
НаборЗаписей = V8.РегистрыСведений.ДанныеДляСвязи.СоздатьНаборЗап исей(); НаборЗаписей.Прочитать();
В чем сакральный смысл вот этих строк?
33 - 04.08.2020 - 11:21
28-USSR >Работает только если база опубликована на веб ?
Uho
34 - 04.08.2020 - 11:44
33-Begemot > если сервис опубликован на веб, база не причем.
Гость
35 - 04.08.2020 - 11:46
Цитата:
Сообщение от USSR Посмотреть сообщение
(27)если особых наработок нет, которых жалко терять, то попробуй другой подход с использованием HTTP сервиса.
А можешь код для примера выложить, как на стороне 7-ки и 8-ки это работает?
Гость
36 - 04.08.2020 - 12:00
Цитата:
Сообщение от Uho Посмотреть сообщение
В чем сакральный смысл вот этих строк?
сакрального - никакого. А так - хочу записи из РС прочесть.
Гость
37 - 04.08.2020 - 12:01
Цитата:
Сообщение от USSR Посмотреть сообщение
запрос с параметрам в JSON
JSON тоже планируется. Но это следующим этапом. Пока вот так, через КОМ.
Гость
38 - 04.08.2020 - 13:21
Цикл по записям победил. Спасибо откликнувшимся.
Гость
39 - 04.08.2020 - 15:46
(35)Могу, пиши почту, скину обработку на 7.7 и расширение на 8.3


К списку вопросов






Copyright ©, Все права защищены