Имя: Пароль:
1C
 
COM соединение + Документы.НайтиПоНомеру ничего не возвращает
0 Darhon
 
18.04.17
12:37
Добрый день! Соединяю через COM две базы - идентичной конфигурации. Соединение устанавливается без ошибок, при попытке поиска в базе преемнике по номеру документа, возвращает пустые ссылки даже для тех доков что точно есть. Код привел ниже:


ПараметрыПодкл = "Srvr = ""srv"";Ref = ""srv""; Usr=""usr"";Pwd=""pwd"";";
V83COMConnector= Новый COMОбъект("V83.COMConnector");
Попытка
Подключение= V83COMConnector.Connect(ПараметрыПодкл);
Сообщить("Успешно подключено");
Исключение
Сообщить ("Ошибка подключения!");
Возврат Неопределено;
КонецПопытки;
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ПрочееОприходованиеТоваров.Ссылка КАК Ссылка
        |ИЗ
        |    Документ.ПрочееОприходованиеТоваров КАК ПрочееОприходованиеТоваров";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        //Сообщить(ВыборкаДетальныеЗаписи.Ссылка);
        СсылкаНаДокумент = Подключение.Документы.ПрочееОприходованиеТоваров.НайтиПоНомеру(ВыборкаДетальныезаписи.Ссылка.Номер);
        Если  СсылкаНаДокумент.Пустая() Тогда
            Сообщить (ВыборкаДетальныеЗаписи.Ссылка.Номер);
        КонецЕсли;
    КонецЦикла;

Подскажите где я ошибся, заранее благодарю
1 catena
 
18.04.17
12:38
А дата?
2 Cyberhawk
 
18.04.17
12:39
Если СсылкаНаДокумент.Пустая() - там будет СОМ-объект же, а не ссылка, не?
3 drcrasher
 
18.04.17
12:40
(2) у СОМ объект есть такой метод
4 Timon1405
 
18.04.17
12:44
(1) +1 (0) см. второй параметр у метода или используйте запрос
5 Darhon
 
18.04.17
12:53
(4) Со вторым параметром тоже самое. Вываливает весь список документов, включая те, которые есть в базе приемнике. А если через уникальный идентификатор пойти??
6 Рэйв
 
18.04.17
13:14
(5)если уверен, что УИДы в двух базах у доков одинаковые, то можешь попробовать так:

   УИД=Подключение.NewObject("УникальныйИдентификатор",Строка(ДокТут.УникальныйИдентификатор()));
   ДокТам=Подключение.Документы.ИмяДокумента.ПолучитьСсылку(УИД);
7 Darhon
 
18.04.17
13:29
(6) с уидами заработало но не совсем так как хотелось бы )  теперь не находит те документы которых нет в преемнике)
8 Darhon
 
18.04.17
13:33
(6) В отладчике пишет СсылкаНаДокумент.пустая() метод объекта не обноружен. При просмотре COMОбъекта СсылкаНаДокумент видно что он соответствует пустой ссылке (
9 Рэйв
 
18.04.17
13:53
(7)Так если нет, он тебе их и по номеру не найдет.
В этом случае он возвращает не пустую ссылку, а "битую"
Проверить можно просто попробовав получить из нее объект.Должно вернуть Неопределено вместо объекта
10 Darhon
 
18.04.17
14:34
(9) Просто на Мисте в прошлом обсуждении у человека работал код: ЕстьЛиПоступление = МодульВнешнихСоединений.Документы.ПоступлениеТоваровУслуг.НайтиПоНомеру(Номер);
Если  ЕстьЛиПоступление.Пустая()   Тогда
    НовыйДокумент =  МодульВнешнихСоединений.Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();

Я делал по аналогии...
11 Darhon
 
18.04.17
14:35
12 h-sp
 
18.04.17
14:42
(10) по номеру без даты не будет искать. хоть ты головой об стенку бейся. Всё равно надо по-человечески написать

МодульВнешнихСоединений.Документы.ПоступлениеТоваровУслуг.НайтиПоНомеру(Номер, КакаяТоДата);
13 catena
 
18.04.17
14:45
(12)Не правда, при определенных условиях будет
14 X Leshiy
 
18.04.17
14:47
(0) По COM ты ссылку не получишь.

СсылкаНаДокументНомер = Подключение.Документы.ПрочееОприходованиеТоваров.НайтиПоНомеру(ВыборкаДетальныезаписи.Ссылка.Номер).Номер;

Если  СсылкаНаДокументНомер = "" Тогда
            Сообщить (ВыборкаДетальныеЗаписи.Ссылка.Номер);
        КонецЕсли;
15 r_i_n_i_k
 
18.04.17
14:49
(13) только если нумерация не периодическая
16 Darhon
 
18.04.17
14:50
Сделал через УИД и объект. Всем спасибо )

УИД=Подключение.NewObject("УникальныйИдентификатор",Строка(ВыборкаДетальныеЗаписи.Ссылка.УникальныйИдентификатор()));
        СсылкаНаДокумент = Подключение.Документы.ПрочееОприходованиеТоваров.ПолучитьСсылку(УИД).ПолучитьОбъект();
        Если  СсылкаНаДокумент=Неопределено Тогда
            Сообщить (ВыборкаДетальныеЗаписи.Ссылка.Номер);
        КонецЕсли;
17 X Leshiy
 
18.04.17
14:52
Оптимальнее получить по СОМ массив номеров документов (по нужным параметрам) и уже на стороне первой базы с ним работать. IMHO.