Имя: Пароль:
1C
1С v8
Связи наборов данных в СКД
0 DrShust
 
23.01.15
13:11
Всем добрый день!
УФ (хотя в данном случае не суть). Есть документ с заполненной табчастью: номенклатура и т.д.. К номенклатуре нужно подтянуть инфу в эту табчасть.
В СКД создал набор данных Запрос, в котором, собственно, инфа и собирается. Полученный результат выгружается в ТЗ. Далее табчасть обходится в цикле, а в полученной ТЗ ищется номенклатура и выдёргивается по ней инфа.
Но в полученной ТЗ, естественно, данные и по той номенклатуре, которой нет в табчасти. Внешним набором (набор данных Объект) передаю табчасть в СКД, чтобы соединить 2 набора: Запрос и Объект, чтобы в полученной ТЗ осталась только инфа по номенклатуре табчасти.
Проблема следующая:соединение в СВЯЗИ НАБОРОВ ДАННЫХ только левое, а нужно внутреннее. Предполагается, что отборы пользователь может устанавливать на форме документа (как в отчётах), потому не могу номенклатуру табчасти отправить в сам запрос, а уже потом отправить в СКД.
Есть предложения?
    
    тзСостав = Состав.Выгрузить(, "Номенклатура");    
    
    ВнешниеНаборыДанных = Новый Структура;
    ВнешниеНаборыДанных.Вставить("тзСостав", тзСостав);
    
    МК = Новый КомпоновщикМакетаКомпоновкиДанных;

    МКД = МК.Выполнить(ПолучитьИзВременногоХранилища(АдресСхемыКомпоновкиДанных), НастройкиФормированияРЗП.Настройки,,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    
    ПКД = Новый ПроцессорКомпоновкиДанных;
    ПКД.Инициализировать(МКД, ВнешниеНаборыДанных);
    
    ПВ = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    ПВ.ОтображатьПроцентВывода = Истина;
    лТЗДанные = ПВ.Вывести(ПКД);  // Это ТЗ из СКД
    
    Если лТЗДанные.Количество() <> 0 Тогда         
        
        Для Каждого лЭлем Из лТабЧастьСостав Цикл // Обходим табчасть
            
            лПараметрыОтбора = Новый Структура;
            лПараметрыОтбора.Вставить("Номенклатура", лЭлем.Номенклатура);
            лНайденныеСтроки = лТЗДанные.НайтиСтроки(лПараметрыОтбора);
            
            Для Каждого лСтрока Из лНайденныеСтроки Цикл      // По найденной номенклатуре заполняем данными        
                лЭлем.Рек1        = лСтрока.Знач1;    
            КонецЦикла;             
            
        КонецЦикла;     
        
    КонецЕсли;
1 Defender aka LINN
 
23.01.15
13:14
(0) Ну наложи отбор на соединяемый запрос, делов-то.
2 DrShust
 
23.01.15
13:16
(1) Я в этот набор передаю только Номенклатуру... Какой отбор, например?
3 Defender aka LINN
 
23.01.15
13:23
(2) По полю, которое в присоединяемом наборе находится, вестимо.
4 DrShust
 
23.01.15
13:28
(3) Это понятно, что из присоединяемого. У меня сейчас передаётся только Номенклатура. Что нужно в отборе указать, чтобы всё было ОК? Или, может, ещё что-то отправить в Объект и по этому полю делать отбор?
5 ам794123
 
23.01.15
13:49
Сделай проще - добавь реквизит формы типа Динамический спиок (произвольный запрос). А уж его потом можно вертеть по всякому: тут тебе и отборы и группировки с сортировками и условное оформление.
6 Defender aka LINN
 
23.01.15
14:37
(4) Я ему про Фому, он мне про Ерему. Да пофигу что у тебя куда передается, отбор этим всем передачам не родственник и даже не сосоед.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн