Обмен через COM не создаёт элемент

1. hoyo 21.02.20 11:03 Сейчас в теме
Доброго времени суток.
Есть задача передавать договоры из УХ в ERP. Делаю COM соединение, код такой:

V83COMConnector= Новый COMОбъект("V83.COMConnector");
	Попытка
		База83 = V83COMConnector.Connect("Srvr=***;Ref=ERP_***;Usr=**;Pwd=***");
	Исключение
		База83 = Неопределено;
		ТекстОшибки = ОписаниеОшибки();
		Сообщить(ТекстОшибки);
	КонецПопытки;
	
	Дог = База83.Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();
	Дог.Наименование = Ссыль.НаименованиеВерсии;
	Дог.Номер = ссыль.Номер;
	Дог.ТипДоговора = База83.Перечисления.ТипыДоговоров.СПоставщиком;
	Дог.Организация = База83.Справочники.Организации.НайтиПоРеквизиту("ИНН", ссыль.Организация.ИНН);
	Дог.Контрагент =  База83.Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ссыль.Контрагент.ИНН );
	Дог.Обменданными.Загрузка = Истина;
	дог.Записать();
	
	База83 = Неопределено;
Показать


Соединение проходит, ошибок никаких нет. Код отрабатывает, но договор в базе не появляется. Смотрю отладчиком, Организация и Контрагент находятся, с этим проблем нет. Если этот же код (без COM-соединения, понятно) запускать напрямую в базе ERP, всё работает, договор создаётся, ошибок нет. Что за нафиг? Может сталкивался кто, где могут быть подводные кадры?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. user623969_dusa 21.02.20 12:00 Сейчас в теме
(1) права то у пользователя есть на изменение и добавление в справочнике? а то вдруг внешнее соединение одним пользователем а проверяете другим
12. AlexO 135 22.02.20 17:49 Сейчас в теме
(1)
Дог.ТипДоговора = База83.Перечисления.ТипыДоговоров.СПоставщиком;
вот такие "обмены" - источник всех ошибок.
В другой базе у вас НЕТ (НЕТ!) этого объекта (Поставщика, Договора, Контрагента, Номенклатуры, etc).
Вообще. Ни одного. Объекта. Соответствующего. Базе-источнику. НИ ОДНОГО.
Все объекты базы-приемника - "чужие" по отношению к объектам базы-приемника (и наоборот). И сопоставлены напрямую по COM быть не могут.
ТипДоговора "СПоставщиком" в одной базе - это совершенно другой "объект" ТипДоговора "СПоставщиком" в другой базе. Они не могут быть сопоставлены.
Да и не настоящие объекты они вовсе в 1С, по большому счету, отсюда и проблемы эти.
Они все - с другими ID, т.е. это совершенно разные "объекты".
По COM ВСЕГДА получаете ТОЛЬКО ПРИМИТИВНЫЕ ДАННЫЕ (строка, наименование, номер, число, ИНН, код, etc).
И уже в базе-приемнике ищете "объект" по этим данным. Не нашли - выкачиваете данные по нему (примитивные! т.е. весь объект целиком - должен быть в виде условной "строки" получен в базе-приемнике) , создаете, только после этого - пользуете для последующих обменов.
YannikAlx; +1 Ответить
2. YannikAlx 43 21.02.20 11:13 Сейчас в теме
Вот если вы уж используете попытку, то почему создание договора вынесли из нее?
Может и выдала бы вам сообщение...
3. hoyo 21.02.20 11:55 Сейчас в теме
(2) Попробовал. Ошибок не выдаёт.
4. YannikAlx 43 21.02.20 11:58 Сейчас в теме
(3) Тогда вопрос - ака вы смотрите что договора нет в базе, если он записывается без ошибки?
Видимо вы не там смотрите , а сам договор создается, только вы не там ищете
6. YannikAlx 43 21.02.20 12:05 Сейчас в теме
(3) Убери вот эту строку - зачем написал?
Дог.Обменданными.Загрузка = Истина;
7. YannikAlx 43 21.02.20 12:08 Сейчас в теме
Ну и самый убойный совет- не делают по человечески такие действия (создание объектов) по СОМ соединению...
Нужно все делать с точностью наоборот - то есть запускать обработку в ERP и высасывать информацию из УХ по СОМ , а создавать уже в текущей базе. Так по любому и проще и красивее и работать легче
8. hoyo 21.02.20 12:16 Сейчас в теме
(7) Просто УХ один, а ERP-шек много будет. Если делать на стороне УХ, это можно один раз запускать и понятно, как контролировать, какие договоры обменялись. А на стороне ERP-шек непонятно, как это контролировать.
9. YannikAlx 43 21.02.20 12:28 Сейчас в теме
(8) ну принципиально это не запрещено....

Так все же как ищете то свои договоры созданные этим кодом?
Раз записались без ошибок - значит - существуют где-то

И еще раз акцентирую - уберите
Дог.Обменданными.Загрузка = Истина; 

Суть этой команды - ничего не проверять и не выполнять функции при записи....
Возможно как раз из-за этого ошибки не выдает , а они есть
10. hoyo 21.02.20 15:33 Сейчас в теме
(9) Я изначально без этой команды пробовал, то же самое. Я как раз подумал, что есть какие-то проверки в коде, которые не дают записать договор, поэтому вотнул.
Проверяю очень просто - ставлю фильтр по контрагенту, который указан в договоре. Фильтр показывает ровно ноль договоров в ERP.
11. YannikAlx 43 21.02.20 15:42 Сейчас в теме
(10) Получите после записи ссылку на записанный договор и попробуйте его найти в самой программе.
Кроме того этот поиск контролируйте в отладке - если ссылка будет - значит вы ищете не так вручную
В отладке попробуйте открыть эту ссылку после записи договора

Ищите по наименованию да номеру
13. AlexO 135 22.02.20 18:03 Сейчас в теме
(11)все правильно, только ТС вообще не видит разницы в "объектах" двух баз, равно как и причины ошибок и конфликтов при обмене.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот