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
| Не, то же самое: Поле агрегатного объекта не обнаружено (Наименование) | | |
4
- 12.07.2020 - 23:10
| Фууух! Спасибо, заработало! Но, блин, почему так сложно-то? Где логика? Как понять, когда к реквизиту можно обратиться просто, как в случае с контрагентом, а когда через задний проход? | | |
5
- 12.07.2020 - 23:17
| Как говорил наш старшина, чтобы солдат ни делал, лишь бы за.бался. | | |
6
- 13.07.2020 - 00:13
| Ну так всё-таки: как понять, когда к реквизиту можно обратиться просто, как в случае с контрагентом, а когда через задний проход? | | |
7
- 13.07.2020 - 03:28
|
(6)Понять это не просто, а очень просто. Надо только внимательнее посмотреть на строчку Контр = ДокЗаявкаКОМ.Контрагент.Наименование; Наименование имеет строковый тип. Получать напрямую можно только примитивные типы - строка, число. дата. А все остальное уже с дополнительными упражнениями. И не дай бог, если твое наименование контрагента не является уникальным в базе (или в базах) | | |
8
- 13.07.2020 - 06:40
| Цитата:
| | |
9
- 13.07.2020 - 07:06
| 8-Trinitron >А где ты у перечисления видел свойство "Наименование"? | | |
10
- 13.07.2020 - 08:45
| Проверяйте сначала тип значения реквизита, а потом уже получайте его свойства. | | |
11
- 13.07.2020 - 16:51
| Перечисление не является примитивным типом и нет у него свойства "Наименование", никогда не было и не будет ) | | |
12
- 13.07.2020 - 17:33
| Про примитивные объекты понял. Спасибо всем, что разъяснили. | | |
13
- 14.07.2020 - 07:16
| ОК, усвоил | | |
14
- 14.07.2020 - 11:40
| Во, ещё вопрос: как теперь разорвать КОМ-соединение? Как отключиться? | | |
15
- 14.07.2020 - 12:02
| Когда завершится процедура, в которой определена переменная БазаТорговли и эта переменная исчезнет - отключение произойдет автоматически. Или можно принудительно: БазаТорговли = ""; | | |
16
- 14.07.2020 - 13:36
| принято, спасибо. | | |
17
- 14.07.2020 - 14:31
|
в мануалах пишут : БазаТорговли = Неопределено; но и в (15) сойдёт | | |
18
- 14.07.2020 - 16:27
| в 77 не прокатит. | | |
19
- 14.07.2020 - 17:35
| точно, не сразу понял что из 7 к 8 подключаетесь | | |
20
- 14.07.2020 - 20:08
| Проблема в том, что по моему начиная с 8.3.14 при соединении из 7.7 процесс остаётся в памяти. На 8.3.12 все чудесно работало. | | |
21
- 15.07.2020 - 01:05
| Какой? УТшный? А почему? Разве при КОМ-соединении запускается полноценный сеанс УТ? Вроде как при ОЛЕ сеанс создаётся.. Или я не прав? | | |
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
| понял, спасибо. | | |
26
- 04.08.2020 - 08:42
| Если обработкой будут пользоваться постоянно, то можно создать общий модуль (например, в расширении) , который будет выполнять действие. А вызывать процедуру из этого модуля и передавать данные по ole из 7.7. Так проще кодить и чем меньше Олька работает тем лучше (ИМХО) | | |
27
- 04.08.2020 - 09:09
| Я в этой кухне вызовов 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ки в 77 тащить. Тогда проще в обработке кодить. | | |
30
- 04.08.2020 - 10:43
|
Блин.. Всё равно затык ( Вот цикл: НаборЗаписей = V8.РегистрыСведений.ДанныеДляСвязи.СоздатьНаборЗап исей(); НаборЗаписей.Прочитать(); Для Сч = 1 По НаборЗаписей.Количество() Цикл ТекЗапись = НаборЗаписей.ПолучитьЗапись(Сч); Сообщить(ТекЗапись.ШтрихКод); КонецЦикла; Штрихкод - это текстовый ресурс регистра сведений "ДанныеДляСвязи". Как его прочитать, чёрт бы его побрал? | | |
31
- 04.08.2020 - 10:44
| я бы рад.. Но вот на данный момент - такая вот идеология. | | |
32
- 04.08.2020 - 11:19
| В чем сакральный смысл вот этих строк? | | |
33
- 04.08.2020 - 11:21
| 28-USSR >Работает только если база опубликована на веб ? | | |
34
- 04.08.2020 - 11:44
| 33-Begemot > если сервис опубликован на веб, база не причем. | | |
35
- 04.08.2020 - 11:46
| А можешь код для примера выложить, как на стороне 7-ки и 8-ки это работает? | | |
36
- 04.08.2020 - 12:00
| сакрального - никакого. А так - хочу записи из РС прочесть. | | |
37
- 04.08.2020 - 12:01
| JSON тоже планируется. Но это следующим этапом. Пока вот так, через КОМ. | | |
38
- 04.08.2020 - 13:21
| Цикл по записям победил. Спасибо откликнувшимся. | | |
39
- 04.08.2020 - 15:46
| (35)Могу, пиши почту, скину обработку на 7.7 и расширение на 8.3 | |
| Интернет-форум Краснодарского края и Краснодара |