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

Вывод результатов запроса в макет

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

            МассивПост=ТаблНомПост.НайтиСтроки(СтруктураОтбора);
            
            //Сч=1;

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

                КонецЕсли;
                //Если Сч = 3 Тогда

                //    Прервать;

                //КонецЕсли;


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

...дык для самой номенклатуры Есть номенклатура поставщика, а для варианта номенклатуры - нету.
   Privetanya
 
14 - 13.07.20 - 10:44
(13) похоже как то ручками надо это сделать
   Privetanya
 
15 - 13.07.20 - 10:54
(13) я же это все проверяю,на имя группировки,и там уже нахожу
   Ёпрст
 
16 - 13.07.20 - 11:09
Ну смотри, если для одной номенклатуры у тебя 3 поставщика, для каждой номенклатуры хотя бы 2 номенклатуры поставщика и для каждого варианта 2 варианта поставщика, то для одной номенклатуры и одного варианта -  3пост*2Номенкл*2варианта 6 комбинаций, если у номенклатуры 3 варианта, то 54 комбинаций возможных.. Тебе точно оно надо всё это вправо видеть в отчете ?
   Privetanya
 
17 - 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
конечно нет, ибо это всё измерения
   Privetanya
 
20 - 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
иначе, регистр надо было делать так:
Измерения
   Номенклатура,Вариант,Поставщик
Ресурсы НоменклатураПоставщика,ВариантПоставщика
   Privetanya
 
23 - 13.07.20 - 11:30
(22) переделать то не долго,сейчас попробую,вывод на макет то все равно не такой как надо будет
   Ёпрст
 
24 - 13.07.20 - 11:33
(23) дело не в переделке, а в том, что вправо будет огромная простыня, которую врят ли кто-то будет смотреть
   Privetanya
 
25 - 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
+ варианты...
   Privetanya
 
29 - 13.07.20 - 11:47
(28) так не может быть


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