Вывод на макет Присоединить()

1. user1008893 14.07.20 14:16 Сейчас в теме
Вывожу на макет Варианты исполнения. И вот у Варианта Лайм софт два варианта поставщика, и вот последняя пустая не добавляется
А у белый софт-Белый/с должен быть в последнем столбце,т.е. до него должны добавиться 2 пустых варианта поставщика.
Подскажите пожалуйста,как подправить...
Если   _ИмяГр = "ВариантИсполнения" тогда
			СтруктураОтбора = Новый Структура("Номенклатура,ВариантИсполнения", ВхЗапрВыб.Номенклатура, ВхЗапрВыб.ВариантИсполнения);
			МассивПост=ТаблНомПост.НайтиСтроки(СтруктураОтбора);
			Если МассивПост.Количество() = 0 Тогда
				 Сч=0;
				пока Сч<>3 Цикл				 
		        Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
				ВхТаблДок.Присоединить(Область);
              Сч=Сч+1;
			КонецЦикла;

			КонецЕсли;
			Сч2=0;
			Для Каждого стр из МассивПост цикл
				
				Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
				Если  _ИмяГр = "ВариантИсполнения" и ТипЗнч(стр.Поставщик) = Тип("СправочникСсылка.Контрагенты")
				 
				 тогда
					Область.Параметры.ЗначениеГрСтрПостав 	= стр.ВариантИсполненияПоставщика;
					  ВхТаблДок.Присоединить(Область); 
					 Сч2=Сч2+1;
				 КонецЕсли;
				   
				 Если Сч2 = 3 Тогда
					Прервать;
				КонецЕсли;
	
			КонецЦикла;	
		КонецЕсли;
Показать
Прикрепленные файлы:
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Sashares 34 14.07.20 14:18 Сейчас в теме
(1) Вместо этого
МассивПост=ТаблНомПост.НайтиСтроки(СтруктураОтбора);
Если МассивПост.Количество() = 0 Тогда
Сч=0;
пока Сч<>3 Цикл
Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
ВхТаблДок.Присоединить(Область);
Сч=Сч+1;
КонецЦикла;

так:
МассивПост=ТаблНомПост.НайтиСтроки(СтруктураОтбора);
            Если МассивПост.Количество() < 3 Тогда
                 Сч=МассивПост.Количество();
                пока Сч<>3 Цикл                 
                Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
                ВхТаблДок.Присоединить(Область);
              Сч=Сч+1;
            КонецЦикла;
3. user1008893 14.07.20 14:29 Сейчас в теме
(2)нет, я вот в этом месте перебираю элементы массива,присваиваю и присоединяю область,а в том месте где вы попросили поправить,я вывожу пустые строки в том случае если массив пустой
Для Каждого стр из МассивПост цикл
				
				Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
				Если  _ИмяГр = "ВариантИсполнения" и ТипЗнч(стр.Поставщик) = Тип("СправочникСсылка.Контрагенты")
				 
				 тогда
					Область.Параметры.ЗначениеГрСтрПостав 	= стр.ВариантИсполненияПоставщика;
					  ВхТаблДок.Присоединить(Область); 
					 Сч2=Сч2+1;
				 КонецЕсли;
				   
				 Если Сч2 = 3 Тогда
					Прервать;
				КонецЕсли;
	
			КонецЦикла;	
Показать
4. Sashares 34 14.07.20 14:53 Сейчас в теме
(3)Перенесите текст из (2) после этого кода.
5. user1008893 14.07.20 15:03 Сейчас в теме
(4) МассивПост.Количество() < 3 так не пойдет,у меня там группировки и количество не верное. Пробую сделать вот так,но когда массив пустой,то выходит ошибка- Индекс находится вне границ массива
Если МассивПост[0].Поставщик < 3  Тогда
                 Сч=МассивПост[0].Поставщик;
                пока Сч<>3 Цикл                 
                Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
                ВхТаблДок.Присоединить(Область);
              Сч=Сч+1;
            КонецЦикла;
			 КонецЕсли;
Показать
6. Sashares 34 14.07.20 15:08 Сейчас в теме
(5)Тогда так:

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

    КонецЦикла; 

   Для Сч = Сч2 По 2 Цикл
                       
        Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
        ВхТаблДок.Присоединить(Область);
     
    КонецЦикла;

КонецЕсли;
Показать
user1008893; +1 Ответить
7. user1008893 14.07.20 15:11 Сейчас в теме
(6) да,правильно,но вот белый,должен быть в последнем столбце,а он в первом остался. Как объяснить,что номенклатура этого поставщика в последнем столбце
8. Sashares 34 14.07.20 15:17 Сейчас в теме +0.5 $m
(7)
Ладно, тогда так6
Если   _ИмяГр = "ВариантИсполнения" тогда
    СтруктураОтбора = Новый Структура("Номенклатура,ВариантИсполнения", ВхЗапрВыб.Номенклатура, ВхЗапрВыб.ВариантИсполнения);
    МассивПост=ТаблНомПост.НайтиСтроки(СтруктураОтбора);
	
	КоличествоЗаполненныхПоставщиков = 0;
	Для Каждого стр из МассивПост цикл
        
		Если  _ИмяГр = "ВариантИсполнения" 
			И ТипЗнч(стр.Поставщик) = Тип("СправочникСсылка.Контрагенты") Тогда
			КоличествоЗаполненныхПоставщиков = КоличествоЗаполненныхПоставщиков + 1;
         КонецЕсли;
           
         Если КоличествоЗаполненныхПоставщиков = 3 Тогда
            Прервать;
        КонецЕсли;

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

    КонецЦикла; 

КонецЕсли
Показать


Просто по скрину не очень понятно, что не так, как должно быть и какой код за что отвечает.
user1008893; +1 Ответить
9. user1008893 14.07.20 15:28 Сейчас в теме
10. user1008893 14.07.20 16:00 Сейчас в теме
(8)Вот где плюсик правильно,и стрелочками указала,куда надо подставить
Прикрепленные файлы:
11. Sashares 34 14.07.20 16:02 Сейчас в теме
(10)Весь текст процедуры приведите. Это точечно не исправляется.
12. user1008893 14.07.20 16:03 Сейчас в теме
(11)
Процедура ВывестиГруппировку(ВхМакет, ВхЗапрВыб, ВхТипГр, ВхНомГр, ВхТаблГр, ВхУровень, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику = Неопределено)
	
	РезультатыЗапросаПост = ПолучитьДанные();
	РезультатЗапросаПост = РезультатыЗапросаПост[2];
   ТаблНомПост = РезультатЗапросаПост.Выгрузить();
	
	_ДнейВМесяце = 30;
	
	Если ВхУровень >= 5 Тогда // максимум 5 уровней (0-4) 
		Возврат;
	КонецЕсли;	
	
	_ИмяСекции                  = ?(ВхТипГр = "Строки", "Гр" + ВхУровень, "ГрИтоги");
	_ИмяГр                      = ВхТаблГр[ВхНомГр].ИмяИзмерения;
	_ВыводитьИтогиПоГруппировке = ВхТаблГр[ВхНомГр].ВыводитьИтоги;
	_ТипИзмерения               = ВхТаблГр[ВхНомГр].ТипИзмерения;
	
	Пока ВхЗапрВыб.Следующий() Цикл
		
		// "_ИмяСекции|Начало"
		Если ВхТипГр = "Итоги" Тогда 
			
			Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Начало");
			ВхТаблДок.Вывести(Область, ВхУровень);
			
		Иначе	
			
			_ЗначениеГр = ВхЗапрВыб[_ИмяГр]; // значение группировки по имени
			
			Если ВхНомГр = (ВхТаблГр.Количество() - 1) И _ИмяГр = "ВариантИсполнения" Тогда // последняя группировка ("ВариантИсполнения")
				Если глПустоеЗначение(_ЗначениеГр) Тогда
					Продолжить;	
				КонецЕсли; 	
			КонецЕсли;
            			
			Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Начало");
			Если ТипЗнч(_ЗначениеГр) = Тип("СправочникСсылка.Номенклатура") Тогда
				Если _ЗначениеГр.ЭтоГруппа Тогда
					Область.Параметры.ЗначениеГрСтр = ВРЕГ(глНоменклатураСтр(_ЗначениеГр));
				Иначе
					
					Если мИспользоватьАртикулы Тогда
						Область.Параметры.Артикул 	= _ЗначениеГр.Артикул;
					КонецЕсли;
					
					Область.Параметры.ЗначениеГрСтр = глНоменклатураСтр(_ЗначениеГр, Ложь) + ", " +  _ЗначениеГр[ИспользуемыеЕдиницыИзмерения];
					
					// для номенклатуры (элементов -> итоги будем выводить при условии, что тип измерения выбран как "Иерархия")
					Если _ТипИзмерения = ТипИзмеренияПостроителяОтчета.Иерархия Тогда
						_ВыводитьИтогиПоГруппировке = Истина;
					КонецЕсли;
					
				КонецЕсли;
			Иначе
				
				Если мИспользоватьАртикулы 
					И ТипЗнч(_ЗначениеГр) = Тип("СправочникСсылка.ВариантыИсполнения") Тогда 
					
					Область.Параметры.Артикул 	= _ЗначениеГр.Артикул;
					
				КонецЕсли;
				
				Область.Параметры.ЗначениеГрСтр = _ЗначениеГр;
				
			КонецЕсли; 
			Область.Параметры.Расшифровка   = _ЗначениеГр;
			ВхТаблДок.Вывести(Область, ВхУровень);
		КонецЕсли;	
						
		// "_ИмяСекции|ВертикальныйРазделитель"
		Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|ВертикальныйРазделитель1");
		ВхТаблДок.Присоединить(Область);
		
		
			Если _ИмяГр = "ОснПоставщик"  тогда
		Сч=0;

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

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

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

    КонецЦикла; 

КонецЕсли;
Показать
14. Sashares 34 14.07.20 16:11 Сейчас в теме
(12)Когда вы выводите группировку с колонками, видимо, поставщиков, вам надо запомнить порядок их вывода.
И потом, когда выводится группировка "ВариантИсполнения" - искать не просто по номенклатуре и варианту исполнения, но и по поставщику, графа которого выводится.
Если нашли - выводится область с данными, если не нашли, то выводится пустая область.
15. user1008893 14.07.20 16:12 Сейчас в теме
(14)и как это сделать? Можете подсказать?
16. Sashares 34 14.07.20 16:23 Сейчас в теме
(15)Возможно, так:
Процедура ВывестиГруппировку(ВхМакет, ВхЗапрВыб, ВхТипГр, ВхНомГр, ВхТаблГр, ВхУровень, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику = Неопределено)
	
	РезультатыЗапросаПост = ПолучитьДанные();
	РезультатЗапросаПост = РезультатыЗапросаПост[2];
	ТаблНомПост = РезультатЗапросаПост.Выгрузить();
	
	_ДнейВМесяце = 30;
	
	Если ВхУровень >= 5 Тогда // максимум 5 уровней (0-4) 
		Возврат;
	КонецЕсли;    
	
	_ИмяСекции                  = ?(ВхТипГр = "Строки", "Гр" + ВхУровень, "ГрИтоги");
	_ИмяГр                      = ВхТаблГр[ВхНомГр].ИмяИзмерения;
	_ВыводитьИтогиПоГруппировке = ВхТаблГр[ВхНомГр].ВыводитьИтоги;
	_ТипИзмерения               = ВхТаблГр[ВхНомГр].ТипИзмерения;
	
	Пока ВхЗапрВыб.Следующий() Цикл
		
		// "_ИмяСекции|Начало"
		Если ВхТипГр = "Итоги" Тогда 
			
			Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Начало");
			ВхТаблДок.Вывести(Область, ВхУровень);
			
		Иначе    
			
			_ЗначениеГр = ВхЗапрВыб[_ИмяГр]; // значение группировки по имени
			
			Если ВхНомГр = (ВхТаблГр.Количество() - 1) И _ИмяГр = "ВариантИсполнения" Тогда // последняя группировка ("ВариантИсполнения")
				Если глПустоеЗначение(_ЗначениеГр) Тогда
					Продолжить;    
				КонецЕсли;     
			КонецЕсли;
			
			Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Начало");
			Если ТипЗнч(_ЗначениеГр) = Тип("СправочникСсылка.Номенклатура") Тогда
				Если _ЗначениеГр.ЭтоГруппа Тогда
					Область.Параметры.ЗначениеГрСтр = ВРЕГ(глНоменклатураСтр(_ЗначениеГр));
				Иначе
					
					Если мИспользоватьАртикулы Тогда
						Область.Параметры.Артикул     = _ЗначениеГр.Артикул;
					КонецЕсли;
					
					Область.Параметры.ЗначениеГрСтр = глНоменклатураСтр(_ЗначениеГр, Ложь) + ", " +  _ЗначениеГр[ИспользуемыеЕдиницыИзмерения];
					
					// для номенклатуры (элементов -> итоги будем выводить при условии, что тип измерения выбран как "Иерархия")
					Если _ТипИзмерения = ТипИзмеренияПостроителяОтчета.Иерархия Тогда
						_ВыводитьИтогиПоГруппировке = Истина;
					КонецЕсли;
					
				КонецЕсли;
			Иначе
				
				Если мИспользоватьАртикулы 
					И ТипЗнч(_ЗначениеГр) = Тип("СправочникСсылка.ВариантыИсполнения") Тогда 
					
					Область.Параметры.Артикул     = _ЗначениеГр.Артикул;
					
				КонецЕсли;
				
				Область.Параметры.ЗначениеГрСтр = _ЗначениеГр;
				
			КонецЕсли; 
			Область.Параметры.Расшифровка   = _ЗначениеГр;
			ВхТаблДок.Вывести(Область, ВхУровень);
		КонецЕсли;    
		
		// "_ИмяСекции|ВертикальныйРазделитель"
		Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|ВертикальныйРазделитель1");
		ВхТаблДок.Присоединить(Область);
		
		
		Если _ИмяГр = "ОснПоставщик"  тогда
			Сч=0;
			
			пока Сч<>3 Цикл                 
				
				Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик"); 
				ВхТаблДок.Присоединить(Область);
				Сч=Сч+1;
				
			КонецЦикла;
		КонецЕсли;		
		
		Если _ИмяГр = "Номенклатура" тогда
			Отбор=Новый Структура("Номенклатура",ВхЗапрВыб.Номенклатура);
			МассивПост=ТаблНомПост.НайтиСтроки(Отбор);
			
			МассивПоставщиковГруппировки = Новый Массив;
			Сч1=0;
			Для Каждого стр из МассивПост цикл
				
				Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
				
				Если _ИмяГр = "Номенклатура" // И  ВхЗапрВыб.РазрешитьНесколькоВариантовИсполнения 
					и 
					ТипЗнч(стр.Поставщик) = Тип("СправочникСсылка.Контрагенты")
					Тогда
					Область.Параметры.ЗначениеГрСтрПостав     =""""+Строка(стр.Поставщик)+""""+ " " + Строка(стр.НоменклатураПоставщика); 
					ВхТаблДок.Присоединить(Область); 
					Сч1=Сч1+1;
					
					МассивПоставщиковГруппировки.Добавить(стр.Поставщик);
					
				КонецЕсли;
				
				Если Сч1 = 3  Тогда
					Прервать;
				КонецЕсли;
				
			КонецЦикла;
			Для Сч = Сч1 По 2 Цикл
				
				Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
				ВхТаблДок.Присоединить(Область);
				
			КонецЦикла;
			
		КонецЕсли;
		//
		Если   _ИмяГр = "ВариантИсполнения" тогда
			Для Инд = 0 По 2 Цикл
				Если МассивПоставщиковГруппировки.Количество()>Инд Тогда
					ТекПоставщик = МассивПоставщиковГруппировки[Инд];
				Иначе
					ТекПоставщик = Неопределено;
				КонецЕсли;
				
				СтруктураОтбора = Новый Структура("Номенклатура,ВариантИсполнения,Поставщик", ВхЗапрВыб.Номенклатура, ВхЗапрВыб.ВариантИсполнения,ТекПоставщик);
				МассивПост=ТаблНомПост.НайтиСтроки(СтруктураОтбора);
				
				Если МассивПост.Количество() Тогда
					Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
					Область.Параметры.ЗначениеГрСтрПостав     = МассивПост[0].ВариантИсполненияПоставщика;
					ВхТаблДок.Присоединить(Область);
				Иначе
					Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
					ВхТаблДок.Присоединить(Область);
				КонецЕсли;
			КонецЦикла;
			 			
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры
Показать
user1008893; +1 Ответить
17. user1008893 14.07.20 16:27 Сейчас в теме
(16) Значение не является значением объектного типа (Количество)
Если МассивПоставщиковГруппировки.Количество()>Инд Тогда
если отладкой посмотреть,то МассивПоставщиковГруппировки неопределено
18. Sashares 34 14.07.20 16:31 Сейчас в теме
(17)Если у вас эта процедура находится в модуле объекта, объявите переменную МассивПоставщиковГруппировки разделе объявления переменных модуля объекта.
Чтобы ее значения сохранялись между вызовами этой процедуры.
user1008893; +1 Ответить
19. user1008893 14.07.20 16:37 Сейчас в теме
(18)Спасибо,Все вроде получилось))
20. Sashares 34 14.07.20 16:38 Сейчас в теме
13. user1008893 14.07.20 16:07 Сейчас в теме
Вот такие данные получаю из запроса и записываю их в массив
Прикрепленные файлы:
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот