Имя: Пароль:
1C
1С v8
Передача ДеревоЗначений через COM соединение.
0 morik44
 
17.09.15
16:18
Добрый день. Столкнулся с проблемой: подключаюсь из Базы1 к Базе2(бп3.0) по COM  обе базы клиент-серверные. Спотыкается на ДеревоЗначений -

                ПараметрыОтчета = БазаБП.NewObject("Структура");        

                ДеревоНастроек = БазаБП.NewObject("ДеревоЗначений");
        ДеревоНастроек.Колонки.Добавить("Наименование");
        ДеревоНастроек.Колонки.Добавить("Код");
        ДеревоНастроек.Колонки.Добавить("ВключатьВОтчет");
        ДеревоНастроек.Колонки.Добавить("Существенность");
        ДеревоНастроек.Колонки.Добавить("ИмяОбластиДопСтроки");
        ДеревоНастроек.Колонки.Добавить("ТипСостава");
        ДеревоНастроек.Колонки.Добавить("МаксимальноеКоличество");
        
        //ИзвлечьИсходнуюСтруктуруНастроек(МакетНастроекПоУмолчанию, СтруктураОтчета.Баланс.ИмяСекцииНастройкиСоставаПоказателей, ДеревоНастроек);
        ИзвлечьИсходнуюСтруктуруНастроек(МакетНастроекПоУмолчанию, СтруктураОтчета.Баланс.ИмяСекцииНастройкиСоставаПоказателей, ДеревоНастроекБаланс);
        
        ДеревоФормы = ДанныеФормыВЗначение(ДеревоНастроекБаланс, Тип("ДеревоЗначений"));
        Для каждого стр из ДеревоФормы.Строки Цикл
             НовСтрока = ДеревоНастроек.Rows.Add();
             ЗаполнитьЗначенияСвойств(НовСтрока,стр);
        КонецЦикла;
        
        //ПараметрыОтчета.Вставить("СоставДополнительныхСтрокБаланс",     ДанныеФормыВЗначение(ДеревоНастроекБаланс, Тип("COMОбъДеревоЗначенийект")));
        ПараметрыОтчета.Вставить("СоставДополнительныхСтрокБаланс",     ДеревоНастроек);

                БазаБП.РегламентированнаяОтчетностьПереопределяемый.ЗаполнитьОтчет("РегламентированныйОтчетБухОтчетность", "ФормаОтчета2011Кв4", ПараметрыОтчета, Контейнер); //- тут вылетает ошибка.

БазаБП.ЗаполнениеБухгалтерскойОтчетностиВызовСервера.ЗаполнитьОтчетБухОтчетностьФормаОтчета2011Кв4(ПараметрыОтчета, Контейнер);
по причине:
Произошла исключительная ситуация (1C:Enterprise 8.3.6.2152): Попытка передачи с клиента на сервер мутабельного значения 1-го параметра метода ЗаполнитьОтчетБухОтчетностьФормаОтчета2011Кв4 ()

Причём на файловых базах всё работает без заморочек. Может кто сталкивался или вкурсе в чём может быть косяк?
1 Serginio1
 
17.09.15
16:22
Сериализуй есериализуй через СериализаторXDTO
2 morik44
 
17.09.15
16:31
(1) Что сериализовать? В БП 2 параметра у  метода ЗаполнитьОтчетБухОтчетностьФормаОтчета2011Кв4 ()  вот в первом ПараметрыОтчета - это стурктура,  надо передать ключ "СоставДополнительныхСтрокБаланс"  с типом ДеревоЗначений, повторяю - в файловых версиях баз всё работает.
3 Serginio1
 
17.09.15
16:47
(2) В файловых работает, потому, что там нет сервера и данные не сериализуются.
4 morik44
 
17.09.15
16:50
(3) мне это надо реализовать без дописания БП
5 Serginio1
 
17.09.15
16:55
Можешь через внешний отчет передавай в него данные, а он будет выполняться на сервере
6 Serginio1
 
17.09.15
17:08
Например
ДляВнешнегоСоединения= Сервер.ВнешниеОбработки.Создать(ПутьКОбработке);
    
    Объект=ДляВнешнегоСоединения.ВычислитьВыражение("Документы.ЗаказПоставщику.СоздатьДокумент()");
7 morik44
 
21.09.15
15:15
(6) Сделал по вашему совету, сериализовал дерево и сделал внешнюю обработку, в функцию этой обрабокти передал что нужно:

        ДеревоДляПереноса = ДанныеФормыВЗначение(ДеревоНастроекБаланс, Тип("ДеревоЗначений"));
        
        ИмяВремФайла = ПолучитьИмяВременногоФайла("xml");
        
        НовыйСериализаторXDTO = Новый СериализаторXDTO(ФабрикаXDTO);
        НоваяЗаписьXML = Новый ЗаписьXML;
        НоваяЗаписьXML.ОткрытьФайл(ИмяВремФайла);
        НовыйСериализаторXDTO.ЗаписатьXML(НоваяЗаписьXML,ДеревоДляПереноса,НазначениеТипаXML.Явное);
        НоваяЗаписьXML.Закрыть();
        
        АдресПараметров = БазаБП.ПоместитьВоВременноеХранилище(ПараметрыОтчета);
        ДляВнешнегоСоединения = БазаБП.ВнешниеОбработки.Создать(ИмяВременногоФайла,Истина);
        
        
        Контейнер = ДляВнешнегоСоединения.ВыполнитьРегламент(ИмяВремФайла,АдресПараметров,Контейнер);


Код из модуля обработки:

Функция ВыполнитьРегламент(ЗаписьXML,АдресПараметров,Контейнер) Экспорт
    ПараметрыОтчета = ПолучитьИзВременногоХранилища(АдресПараметров);
    ЗаписьЖурналаРегистрации("ТестПуть",УровеньЖурналаРегистрации.Информация,,,ЗаписьXML);
    
    ЧтениеXML = Новый ЧтениеXML;
    НовСериализаторXDTO = Новый СериализаторXDTO(ФабрикаXDTO);
    ЧтениеXML.ОткрытьФайл(ЗаписьXML);
    ДеревоНастроек=НовСериализаторXDTO.ПрочитатьXML(ЧтениеXML);
    
    ЗаписьЖурналаРегистрации("ТестДерево",УровеньЖурналаРегистрации.Информация,,,ДеревоНастроек);    
    
    ПараметрыОтчета.Вставить("СоставДополнительныхСтрокБаланс",     ДеревоНастроек);
    РегламентированнаяОтчетностьПереопределяемый.ЗаполнитьОтчет("РегламентированныйОтчетБухОтчетность", "ФормаОтчета2011Кв4", ПараметрыОтчета, Контейнер);
    Возврат Контейнер;
КонецФункции

Ошибка всё равно также: {ОбщийМодуль.РегламентированнаяОтчетностьПереопределяемый.Модуль(4717)}: Ошибка при вызове метода контекста (ЗаполнитьОтчетБухОтчетностьФормаОтчета2011Кв4)
Попытка передачи с клиента на сервер мутабельного значения 1-го параметра метода ЗаполнитьОтчетБухОтчетностьФормаОтчета2011Кв4 ().
8 morik44
 
21.09.15
15:34
Может кто подскажет как всё таки разрешить данную проблему?)
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший