Имя: Пароль:
1C
1С v8
Ошибка. Метод (поле COM-объекта) не найден.
0 Pro-tone
 
30.11.11
09:17
УИ_Бух = СокрЛП(ДокСсылка.УИ_бухгалтерия);
   Если НЕ ПустаяСтрока(УИ_Бух) Тогда
       //документ был выгружен уже ранее, обновим его тогда в бух
       Попытка
           БухДокументРеализация = ВнешняяБаза.Документы.РеализацияТоваровУслуг.ПолучитьСсылку(УИ_Бух);
       Исключение
           //в редких случаях ссылка генерится неверно, тогда пробуем искать по номеру
           НайденныйДок = ВнешняяБаза.Документы.РеализацияТоваровУслуг.НайтиПоНомеру(СокрЛП(ДокСсылка.Номер),ДокСсылка.Дата);
           
           Если НайденныйДок = Неопределено Тогда    
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("");
               БухДокументРеализация = ВнешняяБаза.Документы.РеализацияТоваровУслуг.СоздатьДокумент();
           Иначе  
               БухДокументРеализация = НайденныйДок;
           КонецЕсли;      
           
       КонецПопытки;  
   Иначе    
       БухДокументРеализация = ВнешняяБаза.Документы.РеализацияТоваровУслуг.СоздатьДокумент();
   КонецЕсли;
   
   
   Если НЕ ЗначениеЗаполнено(ДокСсылка.Контрагент.УИ_1СБух) Тогда
       //если нет связи элемента в бух, то прерываем все !
       ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Контрагент "+ДокСсылка.Контрагент.Наименование+" не связан с 1С:Бухгалтерия!
       |Выгрузка документа не возможна !");
       Возврат;
   КонецЕсли;
   


УИ_ВнешнСпрКонтрагенты = ВнешняяБаза.NewObject("УникальныйИдентификатор", ДокСсылка.Контрагент.УИ_1СБух);
   КонтрагентВнеш  = ВнешняяБаза.Справочники.Контрагенты.ПолучитьСсылку(УИ_ВнешнСпрКонтрагенты);
   
   //РУГАЕТСЯ НА БухДокументРеализация.Контрагент - мол, метод "контрагент" не обнаружен !!!
   БухДокументРеализация.Контрагент = КонтрагентВнеш;


Если ставим отладчиком на БухДокументРеализация.Контрагент, то видим нормальный COM-объект, но при обращении к нему в коде - ругается, что метод не найден.
1 Ненавижу 1С
 
гуру
30.11.11
09:20
у тебя в зависимости от условий БухДокументРеализация это объект или ссылка, во втором случае его атрибуты только для чтения
2 Pro-tone
 
30.11.11
09:23
(1)
БухДокументРеализация = ВнешняяБаза.Документы.РеализацияТоваровУслуг.СоздатьДокумент();

по идее тут атрибуты БухДокументРеализация не должны быть только для чтения. Или я что-то не понимаю ? Как записать значение атрибута ?
3 чувак
 
30.11.11
09:25
может так?

      КонецПопытки;  
   Иначе    
       БухДокументРеализация = ВнешняяБаза.Документы.РеализацияТоваровУслуг.СоздатьДокумент();
БухДокументРеализация.Записать();
4 Ненавижу 1С
 
гуру
30.11.11
09:25
(2) тут то да, но...
уверен что именно эта ветка условий выполняется?
5 Ненавижу 1С
 
гуру
30.11.11
09:26
УИ_Бух = СокрЛП(ДокСсылка.УИ_бухгалтерия);
   Если НЕ ПустаяСтрока(УИ_Бух) Тогда
       //документ был выгружен уже ранее, обновим его тогда в бух

       Попытка
           БухДокументРеализация = ВнешняяБаза.Документы.РеализацияТоваровУслуг.ПолучитьСсылку(УИ_Бух).ПОЛУЧИТЬОБЪЕКТ();
       Исключение
           //в редких случаях ссылка генерится неверно, тогда пробуем искать по номеру

           НайденныйДок = ВнешняяБаза.Документы.РеализацияТоваровУслуг.НайтиПоНомеру(СокрЛП(ДокСсылка.Номер),ДокСсылка.Дата).ПОЛУЧИТЬОБЪЕКТ();
           
           Если НайденныйДок = Неопределено Тогда    
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("");
               БухДокументРеализация = ВнешняяБаза.Документы.РеализацияТоваровУслуг.СоздатьДокумент();
           Иначе  
               БухДокументРеализация = НайденныйДок.ПОЛУЧИТЬОБЪЕКТ();
           КонецЕсли;      
           
       КонецПопытки;  
   Иначе    
       БухДокументРеализация = ВнешняяБаза.Документы.РеализацияТоваровУслуг.СоздатьДокумент();
   КонецЕсли;
6 Pro-tone
 
30.11.11
09:27
(4) не просто уверен, я проверял оба случая - когда получен существующий объект, и когда создаем с нуля его, в обоих случаях - "метод не найден" выдает
7 Pro-tone
 
30.11.11
09:31
(5) у меня сейчас случай создания нового документа,  БухДокументРеализация = ВнешняяБаза.Документы.РеализацияТоваровУслуг.СоздатьДокумент();
а твой вариант только для уже полученной ссылки существующего, мне бы с новым сперва понять что не так
8 чувак
 
30.11.11
09:36
А другие реквизиты попробуй заполнять программно. Ошибка повторяется?
9 Pro-tone
 
30.11.11
09:37
(5) щас глянул, вроде бы да, ты прав, получалась ссылка найденная по коду, эх не доглядел я )) а для нового документа все нормально там

вот подправил код

   УИ_Бух = СокрЛП(ДокСсылка.УИ_бухгалтерия);
   Если НЕ ПустаяСтрока(УИ_Бух) Тогда
       //документ был выгружен уже ранее, обновим его тогда в бух
       Попытка
           БухДокументРеализация = ВнешняяБаза.Документы.РеализацияТоваровУслуг.ПолучитьСсылку(УИ_Бух).ПолучитьОбъект();
       Исключение
           //в редких случаях ссылка генерится неверно, тогда пробуем искать по номеру
           НайденныйДок = ВнешняяБаза.Документы.РеализацияТоваровУслуг.НайтиПоНомеру(СокрЛП(ДокСсылка.Номер),ДокСсылка.Дата).ПолучитьОбъект();
           
           Если НайденныйДок = Неопределено Тогда    
               //ну если уж совсем не получается найти, то просто очищаем наше поле "УИ бух в расходной накладной"
               //и создаем новый документ тогда уж
               //ОбщегоНазначенияКлиентСервер.СообщитьПользователю("");
               БухДокументРеализация = ВнешняяБаза.Документы.РеализацияТоваровУслуг.СоздатьДокумент();
           Иначе  
               БухДокументРеализация = НайденныйДок;
           КонецЕсли;      
           
       КонецПопытки;  
   Иначе    
       БухДокументРеализация = ВнешняяБаза.Документы.РеализацияТоваровУслуг.СоздатьДокумент();
   КонецЕсли;
   
   
   //тут заполняем реквизиты шапки и табличной части !!!
   
   Если НЕ ЗначениеЗаполнено(ДокСсылка.Контрагент.УИ_1СБух) Тогда
       //если нет связи элемента в бух, то прерываем все !
       ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Контрагент "+ДокСсылка.Контрагент.Наименование+" не связан с 1С:Бухгалтерия!
       |Выгрузка документа не возможна !");
       Возврат;
   КонецЕсли;
   
   УИ_ВнешнСпрКонтрагенты = ВнешняяБаза.NewObject("УникальныйИдентификатор", ДокСсылка.Контрагент.УИ_1СБух);
   КонтрагентВнеш  = ВнешняяБаза.Справочники.Контрагенты.ПолучитьСсылку(УИ_ВнешнСпрКонтрагенты);
   
   БухДокументРеализация.Контрагент = КонтрагентВнеш;

Спасибо !
10 Pro-tone
 
30.11.11
09:40
(8) да, когда есть объект все верно, тогда на запись реквизиты доступны, ошибка была моя: я ранее для отладки в УИ_1СБух поставил набор ничего не значащих символов, поэтому искался документ по его номеру, возвращалась ссылка, а реквизиты в ней только на чтение как сказано было в (1)