Имя: Пароль:
1C
 
Результат отчета на СКД не выводить на форму, а программно в таблицу значений
0 vikadruzhok
 
12.11.15
19:10
Задача. Есть две базы данных "База1" и "База2". Формируем отчет в "Базе1", но в этот отчет нужно подтянуть данные отчета с базы 2. Вопрос: как сформировать этот отчет в базе2 (подключение через веб-сервис), и не выводя его никуда запихнуть в таблицу значений. Извините, если вопрос банальный, но я еще не все понимаю.
1 Горогуля
 
12.11.15
19:11
а я себе тянул ТЗ оттуда, конвертил строковые УИДы в ссылки и скармливал результат СКД на этой стороне
2 Живой Ископаемый
 
12.11.15
19:14
СКД может выполюнуть в таблицу значений. ищется поиском.
но наверное стоит рассмотреть и другие архитектурные решения
3 vikadruzhok
 
12.11.15
19:14
у меня вопрос как на стороне "Базы2" вызвать отчет, сформировать его и результат засунуть в таблицу значений.  Точнее вопрос в последнем
4 Горогуля
 
12.11.15
19:15
(3) шаг первый: загуглить
5 vikadruzhok
 
12.11.15
19:15
и это все никуда не должно выводиться в "Базе2"
6 Горогуля
 
12.11.15
19:16
(5) только засовываться. про ссылки подумала уже?
7 vikadruzhok
 
12.11.15
19:19
Функция ЗагрузитьXMLТаблицаЗначений(ФайлXML, ФормаИндикатор = Неопределено)
    
    Попытка
        Чтение = Новый ЧтениеXML();
        Чтение.ОткрытьФайл(ФайлXML);    
    Исключение
        Сообщить("Ощибка при чтение данных из XML!" + Символы.ПС + ОписаниеОшибки());
    КонецПопытки;      
    
    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Номенклатура",Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
    КвалификаторыЧисла = Новый КвалификаторыЧисла(10, 0, ДопустимыйЗнак.Неотрицательный);
    ТЗ.Колонки.Добавить("КоличествоОстаток",Новый ОписаниеТипов("Число", КвалификаторыЧисла));
    Атрибут = Новый Соответствие;
    МассивКолонок = Новый Массив;  
    ТаблицаПостроена = Ложь;
    
        
    // Строим таблицу значений      
    Пока Чтение.Прочитать() Цикл        
                  
        
        // Данные по колонке пошли
        Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента и Чтение.Имя = "colum" тогда
            Атрибут.Очистить();
            Пока Чтение.ПрочитатьАтрибут() цикл
                Атрибут[Чтение.Имя] = Чтение.Значение;              
            КонецЦикла;
            
                 МассивКолонок.Добавить(Атрибут["Name"]);
        КонецЕсли;          
        // Данные по колонке закончились                        
        Если Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента и Чтение.Имя = "columns" тогда      
            ТаблицаПостроена = Истина;
        КонецЕсли;
        
        Если Не ТаблицаПостроена тогда
            Продолжить;
        КонецЕсли;          
        
        // Началась запись в таблице значений
        Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента и Чтение.Имя = "record" тогда                      
            ЗаписьТЗ = ТЗ.Добавить();          
            Пока Чтение.Прочитать() цикл                            
                // Конец данных по записи
                Если Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента и Чтение.Имя = "record" тогда
                    Прервать;
                КонецЕсли;  
                
                // Есть такая колонка в нашей ТаблицеЗначений
                Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента и
                     МассивКолонок.Найти(Чтение.Имя) <> Неопределено тогда
                      
                    ИмяКолонки = Чтение.Имя;
                    Чтение.Прочитать();
                    Если Чтение.ТипУзла = ТипУзлаXML.Текст тогда
                        Если ТипЗнч(ЗаписьТЗ[ИмяКолонки]) = Тип("СправочникСсылка.Номенклатура") тогда
                            ЗаписьТЗ[ИмяКолонки] = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(СокрЛП(Чтение.Значение)));
                        ИначеЕсли  ТипЗнч(ЗаписьТЗ[ИмяКолонки]) = Тип("СправочникСсылка.ХарактеристикиНоменклатуры") Тогда    
                             ЗаписьТЗ[ИмяКолонки] = Справочники.ХарактеристикиНоменклатуры.ПолучитьСсылку(Новый УникальныйИдентификатор(СокрЛП(Чтение.Значение)));
                        Иначе
                            ЗаписьТЗ[ИмяКолонки]= СокрЛП(Чтение.Значение);
                        КонецЕсли;
                    КонецЕсли;                      
                КонецЕсли;                                              
            КонецЦикла;                            
        КонецЕсли; // Данные в таблице
        
    КонецЦикла;
    
    КЧ = Новый КвалификаторыЧисла(12,2);
    КС = Новый КвалификаторыСтроки(100);
    Массив = Новый Массив;
    Массив.Добавить(Тип("Строка"));
    ОписаниеТиповС = Новый ОписаниеТипов(Массив, , КС);
    Массив.Очистить();
    Массив.Добавить(Тип("Число"));
    ОписаниеТиповЧ = Новый ОписаниеТипов(Массив, , ,КЧ);
    Массив.Очистить();
    
    Для каждого колонка Из ТЗ.Колонки Цикл
    
        Если ТипЗнч(колонка.ТипЗначения) = Тип("Число") Тогда
            Колонка.ТипЗначения = ОписаниеТиповЧ;
        ИначеЕсли ТипЗнч(колонка.ТипЗначения) = Тип("Строка") Тогда
            Колонка.ТипЗначения = ОписаниеТиповС;        
        КонецЕсли;
    
    КонецЦикла;
    
    Возврат ТЗ;
КонецФункции
8 vikadruzhok
 
12.11.15
19:19
Функция СохранитьТаблицуЗначенийXML(Таблица,Имя)
    
    Попытка
        Запись = Новый ЗаписьXML();
        //Запись.Записать
        Запись.ОткрытьФайл(Имя);    
    Исключение
        Сообщить("Ошибка при создание XML файла! " + Символы.ПС + ОписаниеОшибки());
        Возврат истина;
    КонецПопытки;      
  
        
    Запись.ЗаписатьОбъявлениеXML();
    Запись.ЗаписатьНачалоЭлемента("root");  
    
    Соответствия = Новый Соответствие;
    Соответствия.Вставить("Номенклатура","СправочникСсылка.Номенклатура");
    Соответствия.Вставить("Число","Число");
    Соответствия.Вставить("Пользователь","СправочникСсылка.Пользователи");
    Соответствия.Вставить("Строка","Строка");
    Соответствия.Вставить("Значения свойств объектов (Классификатор)","ПланВидовХарактеристикСсылка.СвойстваОбъектов");
    Соответствия.Вставить("Характеристика номенклатуры","СправочникСсылка.ХарактеристикиНоменклатуры");
    
    МасКолонки = Новый Массив();
    Запись.ЗаписатьНачалоЭлемента("columns");  
    Для Ном = 0 по Таблица.Колонки.Количество()-1 цикл          
        Колонка = Таблица.Колонки[Ном];
        МасКолонки.Добавить(Колонка.Имя);
        
        Запись.ЗаписатьНачалоЭлемента("colum");
        Запись.ЗаписатьАтрибут("Name",Колонка.Имя);
        мСтрока = СтрЗаменить(Строка(Колонка.ТипЗначения),"Null, ","");
        мСтрока = СтрЗаменить(мСтрока,"Null,","");
        мСтрока = СтрЗаменить(мСтрока,",Null","");
        мСтрока = СтрЗаменить(мСтрока,", Null","");
        Попытка
            Запись.ЗаписатьАтрибут("Type",?(Соответствия[мСтрока]=Неопределено,мСтрока,Соответствия[мСтрока]));
        Исключение
           мОшибка = ""+СокрЛП(ОписаниеОшибки())+Символы.ПС+СокрЛП(мСтрока)+Символы.ПС+СокрЛП(Соответствия[мСтрока])+"Конец";
          
           Возврат мОшибка;
        КонецПопытки;
        Запись.ЗаписатьКонецЭлемента();  // colum      
    КонецЦикла;    
    Запись.ЗаписатьКонецЭлемента();  // columns
    
    Запись.ЗаписатьНачалоЭлемента("records");  
    Для Каждого СтрТаблицы из Таблица цикл        
                
        Запись.ЗаписатьНачалоЭлемента("record");
        Для каждого ИмяКолонки из МасКолонки цикл
            Запись.ЗаписатьНачалоЭлемента(ИмяКолонки);
            Если ТипЗнч(СтрТаблицы[ИмяКолонки]) = Тип("СправочникСсылка.Номенклатура") //или ТипЗнч(СтрТаблицы[ИмяКолонки]) = Тип("")
                или ТипЗнч(СтрТаблицы[ИмяКолонки]) = Тип("ПланВидовХарактеристикСсылка.СвойстваОбъектов")
                или ТипЗнч(СтрТаблицы[ИмяКолонки]) = Тип("СправочникСсылка.ХарактеристикиНоменклатуры") тогда
                Значение = СокрЛП(СтрТаблицы[ИмяКолонки].УникальныйИдентификатор());
            Иначе
                Значение = Строка(СтрТаблицы[ИмяКолонки]);
            КонецЕсли;
            
            Запись.ЗаписатьСекциюCDATA(Значение);
            Запись.ЗаписатьКонецЭлемента();
        КонецЦикла;        
        Запись.ЗаписатьКонецЭлемента();
    КонецЦикла;    
    
    Запись.ЗаписатьКонецЭлемента();  // records    
    Запись.ЗаписатьКонецЭлемента();  // root        
    Запись.Закрыть();
    
    Возврат Запись;
КонецФункции
9 vikadruzhok
 
12.11.15
19:19
первый получение в таблицу значений
второе загрузка в таблицу значений
10 vikadruzhok
 
12.11.15
19:20
это уже проверено. работает на другой обработке
11 vikadruzhok
 
12.11.15
19:20
точнее второе из таблицы значений
12 Горогуля
 
12.11.15
19:22
что это за х..мл? в любом случае чужие ссылки база не пережуёт
13 vikadruzhok
 
12.11.15
19:25
у них одинаковые ссылки
14 vikadruzhok
 
12.11.15
19:26
номенклатура создается в одной, а во вторую грузиться обменом
15 Горогуля
 
12.11.15
19:26
(13) хмл тебе, они даже не однофамильцы
16 vikadruzhok
 
12.11.15
19:26
вопрос не в этом(
17 Горогуля
 
12.11.15
19:27
(16) тебе нагуглить компоновку в ТЗ?
18 Горогуля
 
12.11.15
19:29
19 vikadruzhok
 
12.11.15
19:34
думаю разберусь с картинками.
20 Горогуля
 
12.11.15
19:34
не за что
21 vikadruzhok
 
12.11.15
19:35
спасибо) извините, но к концу дня начинаю сильно тупить(
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший