Имя: Пароль:
1C
1С v8
Вывод результатов запроса в макет
,
0 Privetanya
 
13.07.20
09:20
Проблема с выводом поставщиков, столбцы должны появляться в зависимости от самого большего количества поставщиков на одну номенклатуру,но максимум 3.  Получается вот так,но это не правильно как видите на картинке https://ibb.co/3Td5tPy
а должно быть вот так https://ibb.co/ZhhQp9T
Вот результат запроса,который мы записываем в массив https://ibb.co/stth6HF

Счетчик=ТаблНомПост[3].Поставщик;
    пока Счетчик<>0 Цикл    
        Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
        
        Если _ИмяГр = "ОснПоставщик" тогда
            СтруктураОтбора = Новый Структура("Номенклатура,ВариантИсполнения", ВхЗапрВыб.Номенклатура, ВхЗапрВыб.ВариантИсполнения);

            МассивПост=ТаблНомПост.НайтиСтроки(СтруктураОтбора);
            Сч=1;
            Для Каждого стр из МассивПост цикл
                
                //Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
                
                Если _ИмяГр = "ОснПоставщик" Тогда
                    Область.Параметры.ЗначениеГрСтрПостав     = стр.Поставщик;
                     ВхТаблДок.Присоединить(Область);
                     Сч=Сч+1;
                КонецЕсли;
                Если Сч = 3 Тогда
                    Прервать;
                КонецЕсли;

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

                КонецЕсли;
                 Если Сч1 = 3 Тогда
                    Прервать;
                КонецЕсли;

            КонецЦикла;
              //  ВхТаблДок.Присоединить(Область);
        КонецЕсли;
        
        Если  _ИмяГр = "Номенклатура" или _ИмяГр = "ВариантИсполнения" тогда
            СтруктураОтбора = Новый Структура("Номенклатура,ВариантИсполнения", ВхЗапрВыб.Номенклатура, ВхЗапрВыб.ВариантИсполнения);
            МассивПост=ТаблНомПост.НайтиСтроки(СтруктураОтбора);
            Сч2=1;
            Для Каждого стр из МассивПост цикл
                
                //Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
                Если _ИмяГр = "Номенклатура"                    Тогда
                    Область.Параметры.ЗначениеГрСтрПостав     = стр.НоменклатураПоставщика;
                    ВхТаблДок.Присоединить(Область);
                     Сч2=Сч2+1
                Иначе Если
                 _ИмяГр = "ВариантИсполнения" тогда
                    Область.Параметры.ЗначениеГрСтрПостав     = стр.ВариантИсполненияПоставщика;
                      ВхТаблДок.Присоединить(Область);
                     Сч2=Сч2+1
                 КонецЕсли;
                   КонецЕсли;
                 Если Сч2 = 3 Тогда
                    Прервать;
                КонецЕсли;
                
                //ВхТаблДок.Присоединить(Область);
            КонецЦикла;    
            //ВхТаблДок.Присоединить(Область);
        КонецЕсли;
        //ВхТаблДок.Присоединить(Область);
        Счетчик=Счетчик-1;
        КонецЦикла;
1 hhhh
 
13.07.20
09:25
(0) переходи уже на СКД. Чего ты ерундой страдаешь?
2 Privetanya
 
13.07.20
09:26
(1) нельзя СКД, отчет только надо доработать,он же работал раньше
3 hhhh
 
13.07.20
09:34
(2) ну смотри тогда параметры в выборке запроса. где ты получаешь ВхЗапрВыб. Там по моему 3й параметр в Выбрать()
4 Василий Алибабаевич
 
13.07.20
09:35
(2) ГЫ. "нельзя СКД"   Вы там к трубам отопления не прикованы случаем?
5 hhhh
 
13.07.20
09:37
(2) РезультатЗапроса (QueryResult)
Выбрать (Select)
Синтаксис:
Выбрать(<ТипОбхода>, <Группировки>, <ГруппировкиДляЗначенийГруппировок>)
Параметры:
<ТипОбхода> (необязательный)
Тип: ОбходРезультатаЗапроса.
Задает тип обхода записей в получаемой выборке.
Значение по умолчанию: Прямой.
<Группировки> (необязательный)
Тип: Строка.
Список группировок по которым будет вестись обход, разделенных запятыми.
Для детальных записей указывается пустая строка. В случае, если группировки не указаны - будет использоваться следующая группировка, указанная в предложении запроса "ИТОГИ".
<ГруппировкиДляЗначенийГруппировок> (необязательный)
Тип: Строка.
Список группировок, из которых будут выбираться значения группировок для обхода, разделенных запятыми. Если указано "Все", то будут выбираться все значения группировок. Если указана пустая строка, то значения для группировок будут выбираться из предыдущей группировки.
Возвращаемое значение:
Тип: ВыборкаИзРезультатаЗапроса.
Описание:
Формирует выборку записей из результата запроса.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер).
6 Privetanya
 
13.07.20
09:38
(3) ВхЗапрВыб- это основной запрос,вот к нему присоединяю результаты запроса поставщика
  
РезультатыЗапросаПост = ПолучитьДанные();
    РезультатЗапросаПост = РезультатыЗапросаПост[2];
   ТаблНомПост = РезультатЗапросаПост.Выгрузить();
7 Privetanya
 
13.07.20
10:06
(5) с главным запросом,то у меня проблем нет,он работает,только как начинаю эти стобцы с поставщиком добавлять так и ерунда
8 hhhh
 
13.07.20
10:25
(7) ну если вручную, то за два прохода. Сначала выбираешь всех поставщиков и складываешь их в массив. И потом уже для каждого поставщика выполняешь эти действия
9 Privetanya
 
13.07.20
10:29
(8) а я делаю через НайтиСтроки()
Счетчик=ТаблНомПост[3].Поставщик;
    пока Счетчик<>0 Цикл    
        Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
        
        Если _ИмяГр = "ОснПоставщик"  тогда
            СтруктураОтбора = Новый Структура("Номенклатура,ВариантИсполнения", ВхЗапрВыб.Номенклатура);

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

            КонецЦикла;
              
        КонецЕсли;
10 Ёпрст
 
13.07.20
10:33
(0) всё не так просто, у тебя будет кучка колонок для одного поставщика с разной номенклатуройПоставщика  и разными вариантами поставщика.
У тебя же не 1 к одному соответствие в твоём регистре. Надо искать произведение всех параметров, чтоб присоединять вправо
11 Privetanya
 
13.07.20
10:35
(10) Как это сделать?
12 Ёпрст
 
13.07.20
10:36
(11) переписать отчет на построитель или скд, ну или ручками\ручками..делать разворот вправо
13 Ёпрст
 
13.07.20
10:40
+ у тебя могут быть в регистре, не подходящие по условию наборы измерений

Грубо в отчете у тебя попадает Номенклатура-Валенки,Вариант-Замшевые ..а в регистре
Поставщик - Поставщик1
Номенклатура-Валенки
НоменклатураПоставщика - Валенки улучшенные
Вариант-Кожанные
ВариантПоставщика - Замшевые

...дык для самой номенклатуры Есть номенклатура поставщика, а для варианта номенклатуры - нету.
14 Privetanya
 
13.07.20
10:44
(13) похоже как то ручками надо это сделать
15 Privetanya
 
13.07.20
10:54
(13) я же это все проверяю,на имя группировки,и там уже нахожу
16 Ёпрст
 
13.07.20
11:09
Ну смотри, если для одной номенклатуры у тебя 3 поставщика, для каждой номенклатуры хотя бы 2 номенклатуры поставщика и для каждого варианта 2 варианта поставщика, то для одной номенклатуры и одного варианта -  3пост*2Номенкл*2варианта 6 комбинаций, если у номенклатуры 3 варианта, то 54 комбинаций возможных.. Тебе точно оно надо всё это вправо видеть в отчете ?
17 Privetanya
 
13.07.20
11:16
(16) Что то не пойму что не так?

Смотрите

Поставщик           Поставщик1         Пост 2             Пост3
Номенклатура        Номенклатура1        Номенклатура2     Номенклатура3
ВИ                    ВИ1                  ВИ2              ВИ3

И  так далее,Нормально же выходит,мы же только троих поставщиков выбираем
18 Ёпрст
 
13.07.20
11:19
(17) у тебя для одного поставщика всегда 1 номенклатура и 1 вариант ?
19 Ёпрст
 
13.07.20
11:19
конечно нет, ибо это всё измерения
20 Privetanya
 
13.07.20
11:23
(18) нет, для каждой номенклатуры из базы своя номенклатура поставщика
21 Ёпрст
 
13.07.20
11:26
(20) ты не догоняешь.
У тебядля одной номенклатуры могут быть 3 поставщика, для каждого поставщика 10 вариантов номенклатуры, для одного варианта номенклатуры 20 вариантов номенклатуры поставщика..

итого для одной номенклатуры и одного варианта 3*10*20 = 600 комбинаций
и т.д..
22 Ёпрст
 
13.07.20
11:28
иначе, регистр надо было делать так:
Измерения
   Номенклатура,Вариант,Поставщик
Ресурсы НоменклатураПоставщика,ВариантПоставщика
23 Privetanya
 
13.07.20
11:30
(22) переделать то не долго,сейчас попробую,вывод на макет то все равно не такой как надо будет
24 Ёпрст
 
13.07.20
11:33
(23) дело не в переделке, а в том, что вправо будет огромная простыня, которую врят ли кто-то будет смотреть
25 Privetanya
 
13.07.20
11:34
(24) Надо чтобы вправо только три столбца выходило с наименованием поставщиков и все
26 Ёпрст
 
13.07.20
11:44
(25) как это 3 ? А если для одной номенклатуры у каждого поставщика по две номенклатуры поставщика ?
27 Ёпрст
 
13.07.20
11:44
или по 10 ?
28 Ёпрст
 
13.07.20
11:44
+ варианты...
29 Privetanya
 
13.07.20
11:47
(28) так не может быть