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

Отличный пример вреда использования отрицания в идентификаторах.
3 Жан Пердежон
 
30.12.21
12:04
Результат = Новый ТаблицаЗначений; // тут всегда и должно быть 0 строк
4 acht
 
30.12.21
12:04
(0) Пустой результат также может получится из-за некоректных настроек компоновки со сбитыми полями выбора и структурой вывода. Проверь, что поля действительно выбираются, а не только являются доступными.
5 Kassern
 
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
я не совсем понимю НовоеПоле куда попадает
9 Kassern
 
30.12.21
12:43
(7) были такие ситуации, когда отчет скд был пустой, а этот же запрос в консоли заполнялся. Виной были ФО
10 Папай
 
30.12.21
12:47
(9)что за ФО.сейчас попробую отдельно скд запустить
11 acht
 
30.12.21
12:48
(7) Разница в том, что СКД смотрит на твой запрос из консоли запросов, выбрасывает его и строит свой с учетом настроек, прав и т.п. Используй консоль компоновки и все увидишь.
12 Kassern
 
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
может можно проще запрос сделать?
17 Kassern
 
30.12.21
14:30
(16) "ГДЕ
    (Номенклатура.Ссылка В
                (ВЫБРАТЬ
                    НоменклатураИзменения.Ссылка
                ИЗ
                    Справочник.Номенклатура.Изменения КАК НоменклатураИзменения" зачем вы так с номенклатурой?)
18 Папай
 
30.12.21
14:32
может просто изменения выбирать ?
19 Ryzeman
 
30.12.21
14:39
(18) Вынеси во временную

                 ВЫБРАТЬ РАЗЛИЧНЫЕ
                    НоменклатураИзменения.Ссылка КАК Ссылка
                ПОМЕСТИТЬ ТаблицаИзменений
                ИЗ
                    Справочник.Номенклатура.Изменения КАК НоменклатураИзменения
                ГДЕ
                    НоменклатураИзменения.Узел = &Узел

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

ГДЕ
    (Номенклатура.Ссылка В
                (ВЫБРАТЬ
                    ТаблицаИзменений.Ссылка
                ИЗ
                    СТаблицаИзменений КАК ТаблицаИзменений)
            ИЛИ &НеОтборИзменениями)
20 Kassern
 
30.12.21
14:41
(19) можно и связями соединить таблицу номенклатуры с временной таблицей изменений. В условии Выбор Когда &ТолькоИзменеия Тогда ЕстьNull(ВременнаяТаблица.Номенклатура,"")<>"" Иначе Истина Конец
21 Kassern
 
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)
30 shuhard
 
30.12.21
17:14
(28) мопед не твой ?
31 Папай
 
30.12.21
17:17
не мой.разбираюсь.пока не удачно.НовоеПоле куда оно идет потом? в процедуре оно нигде больше не встречается  

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
        
        СхемаСКД = ПолучитьМакет("ВыгрузкаНоменклатуры");    
        
        НовоеПоле = КомпоновщикСхемы.Настройки.ПараметрыДанных.Элементы.Найти("Узел");
        НовоеПоле.Использование = Истина;
        НовоеПоле.Значение = ПланОбмена;
        
        НовоеПоле = КомпоновщикСхемы.Настройки.ПараметрыДанных.Элементы.Найти("НеОтборИзменениями");
        НовоеПоле.Использование = Истина;
        НовоеПоле.Значение = НЕ ВыгружатьИзменения;
        
        //ОсновнаяГруппировка = КомпоновщикСхемы.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
        //ОсновнаяГруппировка.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
        
        МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаСКД, КомпоновщикСхемы.Настройки,,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
        ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
        ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
        
        Результат = Новый ТаблицаЗначений;//////тут ноль строк!а должна быть одна судя по консоли запросов
        
        ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
        ПроцессорВывода.УстановитьОбъект(Результат);
        ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);
        
        Для каждого СтрокаТовараДляОбработки Из Результат Цикл
32 Kassern
 
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
подскажите как проверить на наличие прааметра что не пустая ссылка передается в параметр?через отладчик?по этой строке    
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаСКД, КомпоновщикСхемы.Настройки,,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
38 Kassern
 
30.12.21
23:05
(33) У вас есть настройки "КомпоновщикСхемы.Настройки" куда вы заполняете параметры отбора, а далее, вот сюда КомпоновщикМакета.Выполнить() вы пихаете заполненные настройки
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой