|
через СОМ, передать ГУИД для нового документа | ☑ | ||
---|---|---|---|---|
0
lirt82
13.12.17
✎
07:07
|
Необходимо подключиться к базе через СОМ, и проверить существует ли документ Перемещения по гуиду, если не находит в подключенной базе тогда в ней же создает и присваивает гуид из базы источника и затем тянет данные в него. Проблема в присваивании гуида из базы источника для нового созданного документа.
ЗапросCom = ПодключеннаяБаза.NewObject("Запрос"); ЗапросCom.Текст = "ВЫБРАТЬ | ПеремещениеТоваров.Ссылка КАК ДокМаркет |ИЗ | Документ.ПеремещениеТоваров КАК ПеремещениеТоваров |ГДЕ | ПеремещениеТоваров.Дата МЕЖДУ &ДатаНач И &ДатаКон | И ПеремещениеТоваров.Проведен = ИСТИНА"; ЗапросCom.УстановитьПараметр("ДатаНач", ЭтотОбъект.ДатаНач); ЗапросCom.УстановитьПараметр("ДатаКон", КонецДня(ЭтотОбъект.ДатаКон)); Рез = ЗапросCom.Выполнить().Выбрать(); Пока Рез.Следующий() Цикл ГУИДМаркет = ПодключеннаяБаза.String(Рез.ДокМаркет.УникальныйИдентификатор()); ИщемДокВУПП(ГУИДМаркет); КонецЦикла; ПодключеннаяБаза = Неопределено; Сообщить("Обработка завершена!"); КонецПроцедуры Функция ИщемДокВУПП(ГУИДМаркет) Список = СписокЭкспорт.Выгрузить(); Для каждого Стр Из Список Цикл ГуидДокЭкспорт = Стр.ДокЭкспорт.УникальныйИдентификатор(); ГУИДУПП = Строка(Стр.ДокЭкспорт.УникальныйИдентификатор()); Если ГУИДМаркет = ГУИДУПП Тогда Продолжить; Иначе НовыйДок = ПодключеннаяБаза.Документы.ПеремещениеТоваров.СоздатьДокумент(); Ссылка = НовыйДок.ПолучитьСсылку(Новый УникальныйИдентификатор(ГуидДокЭкспорт)); НовыйДок.УстановитьСсылкуНового(Ссылка); НовыйДок.ВидОперации = ПодключеннаяБаза.Перечисления.ВидыОперацийПеремещениеТоваров.ТоварыПродукция; НовыйДок.Дата = Стр.ДокЭкспорт.Дата; НовыйДок.ОтражатьВУправленческомУчете = Истина; НовыйДок.ОтражатьВБухгалтерскомУчете = Истина; ******** Новыйдок.ОбменДанными.Загрузка = Истина; НовыйДок.Записать(); ******* Метод объекта не обнаружен (ПолучитьСсылку) Ссылка = НовыйДок.ПолучитьСсылку(Новый УникальныйИдентификатор(ГуидДокЭкспорт)); |
|||
1
catena
13.12.17
✎
07:11
|
Ссылка = НовыйДок.ПолучитьСсылку(ПодключеннаяБаза.NewObject("УникальныйИдентификатор",СокрЛП(ГуидДокЭкспорт)));
|
|||
2
Antony8x
13.12.17
✎
07:13
|
+1
|
|||
3
lirt82
13.12.17
✎
07:17
|
(1) Метод объекта не обнаружен (ПолучитьСсылку)
Ссылка = НовыйДок.ПолучитьСсылку(ПодключеннаяБаза.NewObject("УникальныйИдентификатор", СокрЛП(ГуидДокЭкспорт))); |
|||
4
lirt82
13.12.17
✎
07:24
|
Если эту строку убрать
Для каждого Стр Из Список Цикл ГуидДокЭкспорт = Стр.ДокЭкспорт.УникальныйИдентификатор(); ГУИДУПП = Строка(Стр.ДокЭкспорт.УникальныйИдентификатор()); Если ГУИДМаркет = ГУИДУПП Тогда Продолжить; Иначе НовыйДок = ПодключеннаяБаза.Документы.ПеремещениеТоваров.СоздатьДокумент(); НовыйДок.УстановитьСсылкуНового(ГуидДокЭкспорт); то выдает следующее Ошибка при вызове метода контекста (УстановитьСсылкуНового) НовыйДок.УстановитьСсылкуНового(ГуидДокЭкспорт); по причине: Несоответствие типов (параметр номер '1') |
|||
5
lirt82
13.12.17
✎
07:30
|
...в синтаксисе у метода ПолучитьСсылку() Доступность:
внешнее соединение |
|||
6
catena
13.12.17
✎
07:31
|
у меня работает:
ИД = СсылкаНаОбъект.УникальныйИдентификатор(); СсылкаОбъектаПриемника = Соединение.Документы[ИмяОбъекта].ПолучитьСсылку(Соединение.NewObject("УникальныйИдентификатор",СокрЛП(ИД))); |
|||
7
catena
13.12.17
✎
07:32
|
(4)Конечно будет ошибка, ты ему вместо гуила ком-объект даешь.
|
|||
9
lirt82
13.12.17
✎
07:35
|
а может из за платформы? подключаюсь через 8.2.19.83 (7)
|
|||
10
catena
13.12.17
✎
07:35
|
ИД = СсылкаНаОбъект.УникальныйИдентификатор();
СсылкаОбъектаПриемника = Соединение.Документы[ИмяОбъекта].ПолучитьСсылку(Соединение.NewObject("УникальныйИдентификатор",СокрЛП(ИД))); ОбъектПриемника = СсылкаОбъектаПриемника.ПолучитьОбъект(); Если ОбъектПриемника = Неопределено Тогда ОбъектПриемника = Соединение[ТипОбъекта][СокрЛП(ИмяОбъекта)].СоздатьДокумент(); ОбъектПриемника.УстановитьСсылкуНового(СсылкаОбъектаПриемника); КонецЕсли; |
|||
11
lirt82
13.12.17
✎
07:35
|
всмысле в этой версии этот метод неизвестен
|
|||
12
Сти
13.12.17
✎
07:38
|
(11) потому что должно быть не
Ссылка = НовыйДок.ПолучитьСсылку(Новый УникальныйИдентификатор(ГуидДокЭкспорт));
а Ссылка = ПодключеннаяБаза.Документы.ПеремещениеТоваров.ПолучитьСсылку((ПодключеннаяБаза.NewObject("УникальныйИдентификатор",СокрЛП(ГуидДокЭкспорт)));
это метод не объекта, а менеджера |
|||
13
lirt82
13.12.17
✎
07:43
|
(12) при таком коде выдает следующее
Для каждого Стр Из Список Цикл ГуидДокЭкспорт = Стр.ДокЭкспорт.УникальныйИдентификатор(); ГУИДУПП = Строка(Стр.ДокЭкспорт.УникальныйИдентификатор()); Если ГУИДМаркет = ГУИДУПП Тогда Продолжить; Иначе НовыйДок = ПодключеннаяБаза.Документы.ПеремещениеТоваров.СоздатьДокумент(); НовыйДокСсылка = ПодключеннаяБаза.Документы.ПеремещениеТоваров.ПолучитьСсылку(ПодключеннаяБаза.NewObject("УникальныйИдентификатор", СокрЛП(ГуидДокЭкспорт))); НовыйДок.УстановитьСсылкуНового(НовыйДокСсылка); НовыйДок.ВидОперации = ПодключеннаяБаза.Перечисления.ВидыОперацийПеремещениеТоваров.ТоварыПродукция; НовыйДок.Дата = Стр.ДокЭкспорт.Дата; ************* НовыйДок.ОбменДанными.Загрузка = Истина; НовыйДок.Записать(); ///// Ошибка при вызове метода контекста (Записать) НовыйДок.Записать(); по причине: Произошла исключительная ситуация (1C:Enterprise 8.2.19.83): Ошибка при попытке вставки записи с неуникальным значением ссылки. таблица Document118. |
|||
14
Сти
13.12.17
✎
07:50
|
(13) Погоди, так ГуидДокЭкспорт это ГУИД уже имеющегося документа в подключенной базе, как я понимаю (из кода мне неясно, что там в СписокЭкспорт) потому и ругается. Для нового объекта нужно новую уникальную ссылку типа ПодключеннаяБаза.NewObject("УникальныйИдентификатор") без второго параметра
|
|||
15
Efir12
13.12.17
✎
07:51
|
(13)не проще ли получить ссылку, потом получить объект, если его нет будет новый создан
НовыйДок = НовыйДокСсылка.ПолучитьОбъект(); |
|||
16
lirt82
13.12.17
✎
07:57
|
(14) есть обработка выполняется в базе Источник, создает доки проводит их, следующий этап эти доки должны мигрировать в базу приемник, через сом создается подключение, далее запросом получаю существующие доки и проверяю их по гуиду из базы источника если гуид не совпал тогда в базе приемнике создаю новый док и присваиваю ему гиуд из источника, заполняю, записываю и провожу. Проблема только в присваивании гиуда из источника для созданного дока в базе приемнике.
|
|||
17
Сти
13.12.17
✎
08:11
|
(16) Ага, ясно. Такгуид из источника может просто не подойти к приемнику. Это же разные базы, в них одинаковые гуиды могут быть присвоены не соответствующим друг другу объектам. Это и есть тот случай - гуид из источника уже присвоен в приемнике какому-то другому объекту.
Коллизий с гуидами нет в базах, связанных планами обмена, где есть главный и подчиненные узлы, и подчиненные выгружены из главной, у них одна конфа, но это же не тот случай? Вот там уникальность поддерживается для каждой базы. А так, у меня, например, отдельный регистр для ведения соответствия гуидов внешних баз объектам "центральной". И в типовых тоже бывает что-то вроде РС СоответствиеОбъектовДляОбмена - для случаев обмена между разными конфигурациями. |
|||
18
George Wheels
13.12.17
✎
08:58
|
Вместо функции Строка() используй XMLСтрока()
|
|||
19
lirt82
13.12.17
✎
09:03
|
(17) (18) всем спасибо, буду делать в два этапа) двумя разными обработками)).
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |