Имя: Пароль:
1C
1С v8
Входящее платежное поручение и номер договора
0 nebelung
 
09.05.14
22:09
Здравствуйте,

Создаю подписку на событие проведения входящего платежа.
В процедуру обработки подписки при этом система передает ссылку на документ источник, в данном случае ссылку на входящее платежное поручение.
Вопрос, каким образом по ссылке узнать договор контрагента.

Процедура ИнформироватьМакроАккаунтОПоступленииНовогоВходящегоПлатежа(Источник, Отказ)  Экспорт
    ВнешнийСервис = WSСсылки.InfromMacroAccount.СоздатьWSПрокси("http://tempuri.org/","InformFrom1C","BasicHttpBinding_IInformFrom1C";);
    ВнешнийСервис.InformIncomeUpdates();
    
    Запись = Источник.Ссылка;
    Договор = Запись.РасшифровкаПлатежа.ДоговорКонтрагента;

При попытке получить из РасшифровкиПлатежа договор контрагента, выдает ошибку "Поле Объекта ДоговорКонтрагента не обнаружено"
1 Alamo-10
 
09.05.14
22:36
(0) Ну так РасшифровкаПлатежа - это ж, табличная часть вроде. Обходи коллекцию, выбирай договоры
2 nebelung
 
10.05.14
22:25
Сделал так

Процедура ИнформироватьМакроАккаунтОПоступленииНовогоВходящегоПлатежа(Источник, Отказ)  Экспорт
    ВнешнийСервис = WSСсылки.InfromMacroAccount.СоздатьWSПрокси("http://tempuri.org/","InformFrom1C","BasicHttpBinding_IInformFrom1C";);
    ВнешнийСервис.InformIncomeUpdates();
    
    Запись = Источник.Ссылка;
    
    Запрос = Новый Запрос("ВЫБРАТЬ ПлатежноеПоручениеВходящее.РасшифровкаПлатежа.ДоговорКонтрагента
                          |     КАК Договора, ПлатежноеПоручениеВходящее.Номер  КАК Номер,
                          |     ПлатежноеПоручениеВходящее.Дата КАК ДатаПлатежа
                          |ИЗ
                          |    Документ.ПлатежноеПоручениеВходящее КАК ПлатежноеПоручениеВходящее
                          |ГДЕ ПлатежноеПоручениеВходящее.Номер = &Nomer И  ГОД(ПлатежноеПоручениеВходящее.Дата)=&God");
    
    ГодЗаписи = Год(Запись.Дата);
    
    Запрос.УстановитьПараметр("Nomer",Запись.Номер);
    Запрос.УстановитьПараметр("God",ГодЗаписи );
    
    Результат = Запрос.Выполнить();
    
    Выборка = Результат.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        ДогКонтр = Выборка.Номер;        
        ДоговорКонтрагента= Выборка.Договора.Выбрать();
        Пока ДоговорКонтрагента.Следующий() Цикл
            НомерДоговора = ДоговорКонтрагента.ДоговорКонтрагента;
        КонецЦикла;
        
    КонецЦикла;
    
                
    Текст=Новый ТекстовыйДокумент;
    Текст.УстановитьТипФайла(КодировкаТекста.UTF8);
    Текст.ДобавитьСтроку(Запись.СуммаДокумента);
    Текст.ДобавитьСтроку(ДогКонтр);
    //Текст.ДобавитьСтроку(Запись.Ссылка.ДоговорКонтрагента);
    
    Текст.Записать("C:\Дятель.utf");
    //Текст.Записать(Запись.СуммаДокумента);
    Текст=Неопределено;
    Данные=Новый ДвоичныеДанные("C:\Дятель.utf");
    Строка64=Base64Строка(Данные);
    Строка64=Прав(Строка64,СтрДлина(Строка64)-4);
    ДанныеНаЗапись=Base64Значение(Строка64);
    ДанныеНаЗапись.Записать("C:\Дятель.txt");
    
КонецПроцедуры
3 zmaximka
 
10.05.14
22:47
ну может надо написать
Пока ДоговорКонтрагента.Следующий() Цикл
            НомерДоговора = ДоговорКонтрагента.НомерДоговора;
        КонецЦикла;
4 nebelung
 
11.05.14
00:09
В итоге вместе в вызовом веб сервиса
Если вдруг кому интересно

Процедура ИнформироватьМакроАккаунтОПоступленииНовогоВходящегоПлатежа(Источник, Отказ)  Экспорт
    ВнешнийСервис = WSСсылки.InfromMacroAccount.СоздатьWSПрокси("http://tempuri.org/","InformFrom1C","BasicHttpBinding_IInformFrom1C";);
        
    Запись = Источник.Ссылка;
    
    Запрос = Новый Запрос("ВЫБРАТЬ ПлатежноеПоручениеВходящее.РасшифровкаПлатежа.ДоговорКонтрагента
                          |     КАК Договора, ПлатежноеПоручениеВходящее.Номер  КАК Номер,
                          |     ПлатежноеПоручениеВходящее.Дата КАК ДатаПлатежа
                          |ИЗ
                          |    Документ.ПлатежноеПоручениеВходящее КАК ПлатежноеПоручениеВходящее
                          |ГДЕ ПлатежноеПоручениеВходящее.Номер = &Nomer И  ГОД(ПлатежноеПоручениеВходящее.Дата)=&God");
    
    ГодЗаписи = Год(Запись.Дата);
    
    Запрос.УстановитьПараметр("Nomer",Запись.Номер);
    Запрос.УстановитьПараметр("God",ГодЗаписи );
    
    Результат = Запрос.Выполнить();
    
    Выборка = Результат.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        НомерПлатежа = Выборка.Номер;        
        ДатаПлатежа = Выборка.ДатаПлатежа;
        ДоговорКонтрагента= Выборка.Договора.Выбрать();
        Пока ДоговорКонтрагента.Следующий() Цикл
            НомерДоговора = ДоговорКонтрагента.ДоговорКонтрагента;
        КонецЦикла;
        
    КонецЦикла;
    
    ТипWSПараметров = ВнешнийСервис.ФабрикаXDTO.Пакеты.Получить("http://tempuri.org/").Получить("InformIncomeUpdatesByPayment";);
                                                         
    WSПараметр = ВнешнийСервис.ФабрикаXDTO.Создать(ТипWSПараметров);
    WSПараметр.contractNo = СокрЛП(НомерДоговора);
    WSПараметр.paymentNo = СокрЛП(НомерПлатежа);
    WSПараметр.paymentDate = ДатаПлатежа;
    
    ВнешнийСервис.InformIncomeUpdatesByPayment(WSПараметр.contractNo,WSПараметр.paymentNo, WSПараметр.paymentDate);    
    
КонецПроцедуры
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн