Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с вызовом серверной функции через V3ComCon
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
Profi_1C77
Ситуация такова - С УТП через V3Com создается документ ( Заказ Покупателя в СчетНаОплату) ;
Шапка заполняется корректно, но есть проблемы с заполнением доп реквизитов ( Договор)
для его заполнения использую серверную функцию ;
Собственно , Ошибка и Код ;

Помилка при виклику методу контексту (УстановитьДоговорКонтрагента)
{ОбщийМодуль.syn_ОбщегоНазначения.Модуль(278)}: Рез = V3.БухгалтерскийУчетПереопределяемый.УстановитьДоговорКонтрагента(
{Документ.ЗаказПокупателя.Форма.ФормаДокумента.Форма(3050)}: syn_ОбщегоНазначения.ПередатьДокументV3(ЭтотОбъект);
через:
Відбулася виняткова ситуація (BAF 8.3.19.1529): {ОбщийМодуль.БухгалтерскийУчетПереопределяемый.Модуль(335)}: Помилка при виклику методу контексту (Выполнить)
{(18, 40)}: Неправильні параметри
И ДоговорыКонтрагентов.ВидДоговора В (<<?>>&СписокВидовДоговора)

Область ПолучениеПередачаДанныхCOM
// Функции и процедуры работы с COM - Данными;



Процедура ПередатьДокументV3(ОбъектВыгрузки) Экспорт  
    Перем СчетПриемник,ОрганизацияПриемник,КонтрагентПриемник,СчетПокупателюПриемник;
    //ОбъектВыгрузки = Документы.ЗаказПокупателя.СоздатьДокумент();
    
    Если ТипЗнч(ОбъектВыгрузки) <> Тип("ДокументОбъект.ЗаказПокупателя")  Тогда Возврат КонецЕсли;

    ТекстОшибки = "Документ должен быть записан и проведен -  Отказ в передаче";
    Если ОбъектВыгрузки.ЭтоНовый() Тогда Предупреждение(ТекстОшибки); Возврат КонецЕсли;
    Если НЕ ОбъектВыгрузки.Проведен Тогда Предупреждение(ТекстОшибки); Возврат КонецЕсли;
    ТекстОшибки = "Нет данных для Выгрузки";
    Если ОбъектВыгрузки.ТоварыБух.Количество() = 0 Тогда Предупреждение(ТекстОшибки); Возврат КонецЕсли;
    
    Если  НЕ ЗначениеЗаполнено(ОбъектВыгрузки.СтруктурнаяЕдиница) Тогда Возврат КонецЕсли;
    ИсходныйСчетСсылка = ОбъектВыгрузки.СтруктурнаяЕдиница.Ссылка;
    
    ДанныеОбмена = ПолучитьНастройкуОбменаДляСчетаБанка(ИсходныйСчетСсылка);
    V3 = ВыполнитьПодключениеКИБПриемнику(ДанныеОбмена);    
    
    // Данные
    СчетПриемник = ПолучитБанковскийСчет(СокрЛП(ИсходныйСчетСсылка.НомерСчета),V3);
    Если СчетПриемник <>Неопределено Тогда
        ОрганизацияПриемник = СчетПриемник.Владелец.Ссылка;     
    КонецЕсли;
    
    КонтрагентПриемник = ПолучитьКонтрагентаПриемника(СокрЛП(ОбъектВыгрузки.Контрагент.КодПоЕДРПОУ),V3);    
    
    
    // создаем документ Счет;
     СчетПокупателюПриемник                     = V3.Документы.СчетНаОплатуПокупателю.СоздатьДокумент();
     СчетПокупателюПриемник.Дата                = ТекущаяДата();//ОбъектВыгрузки.Дата;
     СчетПокупателюПриемник.Организация         = ОрганизацияПриемник;
     СчетПокупателюПриемник.СтруктурнаяЕдиница  = СчетПриемник;    
     СчетПокупателюПриемник.Контрагент          = КонтрагентПриемник;
     СчетПокупателюПриемник.Комментарий         = "Создано из УТП";
     СчетПокупателюПриемник.ОбменДанными.Загрузка= Истина;
     //СчетПокупателюПриемник.Записать();
    
     // Выолним метод Приемника;
    
     СписокДоговоровПриемник = ПолучитьМассивВидовДоговоровПриемника(V3);
    Рез =  V3.БухгалтерскийУчетПереопределяемый.УстановитьДоговорКонтрагента(
        СчетПокупателюПриемник.ДоговорКонтрагента, СчетПокупателюПриемник.Контрагент, СчетПокупателюПриемник.Организация,
        СписокДоговоровПриемник);
    
    
    
    V3= Неопределено; // разрыв соединения;
КонецПроцедуры        


Функция ПолучитБанковскийСчет(ИсходныйСчет,Соединение)
    Рез = Неопределено;
    //Возврат  Соединение.Справочники.БанковскиеСчета.НайтиПоРеквизиту("НомерСчета",ИсходныйСчет); не отрабатывает , так как Владелец может быть и Контрагент;
    Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
    |    БанковскиеСчета.Ссылка КАК Ссылка
    |ИЗ
    |    Справочник.БанковскиеСчета КАК БанковскиеСчета
    |ГДЕ
    |    БанковскиеСчета.НомерСчета = &НомерСчета
    |    И ТИПЗНАЧЕНИЯ(БанковскиеСчета.Владелец) = ТИП(Справочник.Организации)";
    Запрос = Соединение.NewObject("Запрос");
    Запрос.Текст = Текст;
    Запрос.УстановитьПараметр("НомерСчета", ИсходныйСчет);
    ТЗ = Запрос.Выполнить().Выгрузить();
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        Рез = Выборка.Ссылка;
    КонецЦикла;
    Возврат Рез;
КонецФункции




Функция ПолучитьКонтрагентаПриемника(КодЕДРПОУ,Соединение)
    
    Возврат  Соединение.Справочники.Контрагенты.НайтиПоРеквизиту("КодПоЕДРПОУ",КодЕДРПОУ);
    
КонецФункции  


Функция ПолучитьМассивВидовДоговоровПриемника(Соединение)

    СписокВидовДоговоров = Соединение.NewObject("Массив");
    СписокВидовДоговоров.Добавить(ПредопределенноеЗначение("Перечисление.ВидыДоговоровКонтрагентов.СПокупателем"));
    СписокВидовДоговоров.Добавить(ПредопределенноеЗначение("Перечисление.ВидыДоговоровКонтрагентов.СКомиссионером"));
    СписокВидовДоговоров.Добавить(ПредопределенноеЗначение("Перечисление.ВидыДоговоровКонтрагентов.СКомитентом"));

    Возврат СписокВидовДоговоров;

КонецФункции


#КонецОбласти


xlmel
СписокВидовДоговоров.Добавить(ПредопределенноеЗначение("Перечисление.ВидыДоговоровКонтрагентов.СПокупателем"));
Фактически Вы в СОМ-объект пытаетесь добавить значение ссылочное значение из текущей базы.
Надо сделать
СписокВидовДоговоров.Добавить(V3.Перечисления.ВидыДоговоровКонтрагентов.СПокупателем);
Ну и в отладчике проверьте, что на самом деле представляет из себя СписокВидовДоговоров
Profi_1C77
xlmel @ Сегодня, 8:46 необходимо зарегистрироваться для просмотра ссылки ,
Вчера действитиельно допер, что массив был "пустой" заполнялся элементами УТП а не BAS

И вопрос походу как отладку норм сделать , что б " прыгало" из УТП в BAS? OData или внешнее соед. ?
xlmel
Profi_1C77 @ Сегодня, 8:56 необходимо зарегистрироваться для просмотра ссылки ,
думаю, что никак не сделать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.