Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

пустой результат компоновки

пустой результат компоновки
Я
   Папай
 
30.12.21 - 11:37
всем привет.не знал как тему назвать.написал что было
Есть не большой код.вроде все правильно да не все.Результат возвращает ноль,однако консоль показывает что запрос отрабатывает и возвращает одну позицию номенклатуры.
подскажите где ошибка:
        КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
        
        СхемаСКД = ПолучитьМакет("ВыгрузкаНоменклатуры");    
        
        НовоеПоле = КомпоновщикСхемы.Настройки.ПараметрыДанных.Элементы.Найти("Узел");
        НовоеПоле.Использование = Истина;
        НовоеПоле.Значение = ПланОбмена;
        
        НовоеПоле = КомпоновщикСхемы.Настройки.ПараметрыДанных.Элементы.Найти("НеОтборИзменениями");
        НовоеПоле.Использование = Истина;
        НовоеПоле.Значение = НЕ ВыгружатьИзменения;
        
        //ОсновнаяГруппировка = КомпоновщикСхемы.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
        //ОсновнаяГруппировка.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
        
        МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаСКД, КомпоновщикСхемы.Настройки,,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
        ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
        ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
        
        Результат = Новый ТаблицаЗначений;//////тут ноль строк!а должна быть одна судя по консоли запросов
        
        ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
        ПроцессорВывода.УстановитьОбъект(Результат);
        ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);
        
        Для каждого СтрокаТовараДляОбработки Из Результат Цикл
   acht
 
1 - 30.12.21 - 12:00
В только что созданной таблице всегда ноль строк. Ты уверен, что написал комментарий в нужном месте?
   acht
 
2 - 30.12.21 - 12:02
(0)
> НовоеПоле = КомпоновщикСхемы.Настройки.ПараметрыДанных.Элементы.Найти("НеОтборИзменениями");
> НовоеПоле.Использование = Истина;
> НовоеПоле.Значение = НЕ ВыгружатьИзменения; 

Отличный пример вреда использования отрицания в идентификаторах.
   Жан Пердежон
 
3 - 30.12.21 - 12:04
Результат = Новый ТаблицаЗначений; // тут всегда и должно быть 0 строк
   acht
 
4 - 30.12.21 - 12:04
(0) Пустой результат также может получится из-за некоректных настроек компоновки со сбитыми полями выбора и структурой вывода. Проверь, что поля действительно выбираются, а не только являются доступными.
   Kassern
 
5 - 30.12.21 - 12:06
(0) "однако консоль показывает что запрос отрабатывает", а если не через консоль, а через обычный СКД отчет сформировать, так же 1 строчка будет?
   Папай
 
6 - 30.12.21 - 12:16
перефразирую
Для каждого СтрокаТовараДляОбработки Из Результат Цикл
результат ничего не содержит
   Папай
 
7 - 30.12.21 - 12:34
(5)а какая разница
   Папай
 
8 - 30.12.21 - 12:42
я не совсем понимю НовоеПоле куда попадает
   Kassern
 
9 - 30.12.21 - 12:43
(7) были такие ситуации, когда отчет скд был пустой, а этот же запрос в консоли заполнялся. Виной были ФО
   Папай
 
10 - 30.12.21 - 12:47
(9)что за ФО.сейчас попробую отдельно скд запустить
   acht
 
11 - 30.12.21 - 12:48
(7) Разница в том, что СКД смотрит на твой запрос из консоли запросов, выбрасывает его и строит свой с учетом настроек, прав и т.п. Используй консоль компоновки и все увидишь.
   Kassern
 
12 - 30.12.21 - 12:53
(10) функциональные опции
   Папай
 
13 - 30.12.21 - 13:20
(11)сделал отчет на том же скд .отчет показал одну позицию номенклатуры.
   Папай
 
14 - 30.12.21 - 14:22
загрузил в консоль компоновки.почему то ругается Использование циклических параметров запрещено "Узел"
   Папай
 
15 - 30.12.21 - 14:23
ВЫБРАТЬ
    Номенклатура.Ссылка КАК Ссылка,
    Номенклатура.Родитель КАК Родитель,
    Номенклатура.АЧ_ВыгружатьМорфей КАК ВыгружатьМорфей,
    Номенклатура.АЧ_ВыгружатьIddy КАК ВыгружатьИдди
{ВЫБРАТЬ
    Ссылка.*,
    Родитель.*,
    ВыгружатьМорфей,
    ВыгружатьИдди}
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    (Номенклатура.Ссылка В
                (ВЫБРАТЬ
                    НоменклатураИзменения.Ссылка
                ИЗ
                    Справочник.Номенклатура.Изменения КАК НоменклатураИзменения
                ГДЕ
                    НоменклатураИзменения.Узел = &Узел)
            ИЛИ &НеОтборИзменениями)
{ГДЕ
    Номенклатура.Ссылка.*,
    Номенклатура.Родитель.*,
    Номенклатура.АЧ_ВыгружатьМорфей КАК ВыгружатьИдди,
    Номенклатура.АЧ_ВыгружатьIddy КАК ВыгружатьМорфей}
   Папай
 
16 - 30.12.21 - 14:28
может можно проще запрос сделать?
   Kassern
 
17 - 30.12.21 - 14:30
(16) "ГДЕ
    (Номенклатура.Ссылка В
                (ВЫБРАТЬ
                    НоменклатураИзменения.Ссылка
                ИЗ
                    Справочник.Номенклатура.Изменения КАК НоменклатураИзменения" зачем вы так с номенклатурой?)
   Папай
 
18 - 30.12.21 - 14:32
может просто изменения выбирать ?
   Ryzeman
 
19 - 30.12.21 - 14:39
(18) Вынеси во временную
                 ВЫБРАТЬ РАЗЛИЧНЫЕ
                    НоменклатураИзменения.Ссылка КАК Ссылка
                ПОМЕСТИТЬ ТаблицаИзменений
                ИЗ
                    Справочник.Номенклатура.Изменения КАК НоменклатураИзменения
                ГДЕ
                    НоменклатураИзменения.Узел = &Узел

А в условии будет

ГДЕ
    (Номенклатура.Ссылка В
                (ВЫБРАТЬ
                    ТаблицаИзменений.Ссылка
                ИЗ
                    СТаблицаИзменений КАК ТаблицаИзменений)
            ИЛИ &НеОтборИзменениями)
   Kassern
 
20 - 30.12.21 - 14:41
(19) можно и связями соединить таблицу номенклатуры с временной таблицей изменений. В условии Выбор Когда &ТолькоИзменеия Тогда ЕстьNull(ВременнаяТаблица.Номенклатура,"")<>"" Иначе Истина Конец
   Kassern
 
21 - 30.12.21 - 14:41
ну или что-то в этом роде
   Папай
 
22 - 30.12.21 - 15:45
максимально упростил запрос выгрузил в xml загрузил в консоль системы компоновки все равно пишет Использование циклических параметров запрещено "Узел"
   Папай
 
23 - 30.12.21 - 15:46
где тут цикличность то

ВЫБРАТЬ
    Номенклатура.Ссылка КАК Ссылка
ИЗ
    Справочник.Номенклатура.Изменения КАК Номенклатура
ГДЕ
    Номенклатура.Узел = &Узел
   ДенисЧ
 
24 - 30.12.21 - 15:52
(23) Параметр переменуй.
   Папай
 
25 - 30.12.21 - 16:09
(24)спасибо!
   Папай
 
26 - 30.12.21 - 16:52
я так думаю надо схему копать.запрос отрабатывает,выводит номенклатуру через консоль запросов, а консоль компоновки не выводит номенклатуру
   Папай
 
27 - 30.12.21 - 16:53
в консоли системы компоновки на закладке табличный документ пусто
   Папай
 
28 - 30.12.21 - 17:08
подскажите вот этот кусок что означает?
        НовоеПоле = КомпоновщикСхемы.Настройки.ПараметрыДанных.Элементы.Найти("УзелОбмена"); 
        НовоеПоле.Использование = Истина;
        НовоеПоле.Значение = ПланОбмена;
   Папай
 
29 - 30.12.21 - 17:13
и как он работает в (0)
   shuhard
 
30 - 30.12.21 - 17:14
(28) мопед не твой ?
 
 
   Папай
 
31 - 30.12.21 - 17:17
не мой.разбираюсь.пока не удачно.НовоеПоле куда оно идет потом? в процедуре оно нигде больше не встречается  
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
        
        СхемаСКД = ПолучитьМакет("ВыгрузкаНоменклатуры");    
        
        НовоеПоле = КомпоновщикСхемы.Настройки.ПараметрыДанных.Элементы.Найти("Узел");
        НовоеПоле.Использование = Истина;
        НовоеПоле.Значение = ПланОбмена;
        
        НовоеПоле = КомпоновщикСхемы.Настройки.ПараметрыДанных.Элементы.Найти("НеОтборИзменениями");
        НовоеПоле.Использование = Истина;
        НовоеПоле.Значение = НЕ ВыгружатьИзменения;
        
        //ОсновнаяГруппировка = КомпоновщикСхемы.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));

        //ОсновнаяГруппировка.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));

        
        МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаСКД, КомпоновщикСхемы.Настройки,,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
        ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
        ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
        
        Результат = Новый ТаблицаЗначений//////тут ноль строк!а должна быть одна судя по консоли запросов

        
        ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
        ПроцессорВывода.УстановитьОбъект(Результат);
        ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);
        
        Для каждого СтрокаТовараДляОбработки Из Результат Цикл
   Kassern
 
32 - 30.12.21 - 17:19
   Папай
 
33 - 30.12.21 - 18:33
я непонимаю  как ПараметрДанных будет связан с моей СКД?

Есть параметр, предопределенное при открытии отчета каждый раз. Как его правильно указать в СКД?
Можно делать так:
Код 1C v 8.х
 Процедура ПриОткрытии()
//........................

ПараметрДанных= КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Товар");
ПараметрДанных.Значение = Справочники.Номенклатура.НайтиПоНаименованию("Гвозди");
ПараметрДанных.Использование=Истина;
//...........................................

КонецПроцедуры
   Папай
 
34 - 30.12.21 - 18:33
(32)это оттуда
   Папай
 
35 - 30.12.21 - 18:41
как можно это разобрать в отладчике чтобы посмотреть параметр установлен или нет?
        МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаСКД, КомпоновщикСхемы.Настройки,,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
        ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
        ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);

такое ощущение что это не срабатывает:
        НовоеПоле = КомпоновщикСхемы.Настройки.ПараметрыДанных.Элементы.Найти("УзелОбмена"); 
        НовоеПоле.Использование = Истина;
        НовоеПоле.Значение = ПланОбмена;
   Папай
 
36 - 30.12.21 - 19:10
взял отсюда код http://1cmanager.ru/projects/all/wiki/Система_компоновки_данных_(СКД)

    ПараметрДанных = КомпоновщикСхемы.Настройки.ПараметрыДанных.Элементы.Найти("УзелОбмена");
    ПараметрДанных.Использование = Истина;
    ПараметрДанных.Значение  = ПланОбмена;  

    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаНоменклатуры, КомпоновщикСхемы.ПолучитьНастройки(),,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,, Истина);

    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;

    ТЗНоменклатура = Новый ТаблицаЗначений;
    ПроцессорВывода.УстановитьОбъект(ТЗНоменклатура);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);

все равно пусто в ТЗ хоть тресни
   Папай
 
37 - 30.12.21 - 19:24
подскажите как проверить на наличие прааметра что не пустая ссылка передается в параметр?через отладчик?по этой строке    
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаСКД, КомпоновщикСхемы.Настройки,,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
   Kassern
 
38 - 30.12.21 - 23:05
(33) У вас есть настройки "КомпоновщикСхемы.Настройки" куда вы заполняете параметры отбора, а далее, вот сюда КомпоновщикМакета.Выполнить() вы пихаете заполненные настройки


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.